Cómo hacer parpadear sin utilizar la función delay () en Arduino

Arduino es una plataforma de hardware libre y software de código abierto que permite crear proyectos interactivos utilizando una variedad de componentes electrónicos. Uno de los proyectos más básicos que se pueden construir con un Arduino es hacer que un LED parpadee. Sin embargo, es común utilizar la función delay () para hacer esta tarea, lo que puede ocasionar problemas cuando se trata de realizar múltiples tareas simultáneamente. En este artículo, veremos cómo hacer parpadear sin la función delay () en Arduino utilizando la técnica de "máquina de estado finito".
Técnica de "máquina de estado finito"
La técnica de "máquina de estado finito" implica dividir el proceso de parpadeo de un LED en múltiples estados finitos que se ejecutan en función de un temporizador. En lugar de usar la función delay (), se utiliza un temporizador como el temporizador interno de Arduino o un temporizador externo, para hacer cambios de estado en la máquina de estado finito.
Paso 1: Configuración de entrada y salida
Lo primero que se debe hacer es configurar los pines de entrada y salida del Arduino. En este caso, se debe insertar un LED en un pin de salida y un botón en un pin de entrada.
Paso 2: Definir los estados
Para definir los estados, primero hay que considerar el comportamiento del LED. Si el LED está encendido, se debe apagar y si el LED está apagado, se debe encender. Entonces, se definen los estados "encendido" y "apagado" como parte de la máquina de estado finito.
Paso 3: Escribir el código para el estado "encendido"
En el estado "encendido", el LED debe permanecer encendido durante un período de tiempo específico antes de pasar al estado "apagado". Este período de tiempo se puede realizar utilizando un temporizador. Durante el estado "encendido", el temporizador debe contar hacia abajo y, cuando alcance cero, debe cambiar al estado "apagado".
Paso 4: Escribir el código para el estado "apagado"
En el estado "apagado", el LED debe permanecer apagado durante un período de tiempo específico antes de pasar al estado "encendido". Este período de tiempo también se puede realizar utilizando un temporizador. Durante el estado "apagado", el temporizador debe contar hacia abajo y, cuando alcance cero, debe cambiar al estado "encendido".
Paso 5: Ejecutar la máquina de estado finito
Una vez que se ha definido el código para los estados "encendido" y "apagado", puede ejecutarse la máquina de estado finito utilizando un ciclo while. El ciclo while verifica continuamente si se ha alcanzado el final del estado actual. Si se ha alcanzado el final del estado, el LED cambia al siguiente estado correspondiente.
Ejemplo de código
Aquí hay un ejemplo de código que puede utilizarse para parpadear un LED sin usar la función delay () en Arduino:
const int LEDPin = 4;
const int buttonPin = 2;
int currentState = 0;
unsigned long lastStateChangeTime = 0;
unsigned long stateChangeTime = 500;
void setup() {
pinMode(LEDPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
unsigned long currentTime = millis();
int buttonState = digitalRead(buttonPin);
switch (currentState) {
case 0:
digitalWrite(LEDPin, HIGH);
if (currentTime - lastStateChangeTime >= stateChangeTime) {
currentState = 1;
lastStateChangeTime = currentTime;
}
break;
case 1:
digitalWrite(LEDPin, LOW);
if (currentTime - lastStateChangeTime >= stateChangeTime) {
currentState = 0;
lastStateChangeTime = currentTime;
}
break;
}
}
Conclusión
En este artículo hemos aprendido cómo hacer parpadear sin usar la función delay () en Arduino, utilizando la técnica de "máquina de estado finito". Esta técnica permite crear proyectos más complejos y hacer múltiples tareas simultáneamente. ¡Ahora es el momento de empezar a crear proyectos más avanzados con Arduino!
Preguntas frecuentes
1. ¿Por qué no debería usar la función delay () en Arduino?
La función delay () detiene la ejecución del código, lo que hace que sea difícil realizar cualquier otra tarea mientras se está ejecutando la función delay (). Además, puede hacer que el proyecto sea menos preciso ya que la función delay () no puede garantizar el timing exacto.
2. ¿Qué es una máquina de estado finito?
Una máquina de estado finito es un modelo matemático utilizado para diseñar sistemas que se comportan de manera predecible y que se pueden describir como una serie de estados discretos.
3. ¿Para qué puedo utilizar la técnica de máquina de estado finito en Arduino?
La técnica de máquina de estado finito puede utilizarse para cualquier proyecto que requiera el control de múltiples eventos simultáneamente, lo que hace que sea especialmente útil en proyectos complejos. Por ejemplo, puede utilizarse para controlar robots, sistemas de iluminación, sistemas de control de temperatura, entre otros.
4. ¿Se necesita algún hardware externo para usar la técnica de máquina de estado finito en Arduino?
No necesariamente. La mayoría de las placas Arduino tienen un temporizador interno que puede utilizarse para ejecutar la técnica de máquina de estado finito. Sin embargo, si se requiere mayor precisión en la temporización, pueden utilizarse temporizadores externos adicionales.
[nekopost slugs="impresion-de-serie-diferencia-de-impresion-arduino,funciones-de-tiempo-arduino,guia-arduino-uno-pinout,lenguaje-de-programacion-arduino-uso,funcion-memcpy-arduino,interfaz-bluetooth-modulo-arduino-uno,ejecutar-el-codigo-arduino,power-arduino-smartphone-charger,esp32-vs-arduino"]

Deja una respuesta