En este tutorial voy a Explicar con un ejemplo como «utilizar» arduino como multitarea (multitasking), sabiendo que la programación es secuencial y su microcontrolador no es multitarea, sin el uso de ninguna librería. Simularemos que si lo es, gracias al manejo de los tiempos dentro de nuestro código y a la frecuencia de trabajo de nuestra placa.
Suscribite al Canal!!!
Este es un proyecto muy interesante. Es simple de hacer, fácil de programar el arduino y también un gran proyecto para todos los «MAKERS» como yo. Así que a no perder el tiempo y a hacer este proyecto.
Concepto:
Un led enciende y apaga cada 1 segundo, otro led enciende y apaga cada 0,5 segundos y el último enciende y se apaga mientras esta pulsado el pulsador. siendo cada led independiente de los otros. Lo que observamos es «multitarea», porque cada tiempo es independiente y se realiza independientemente de lo que le pase a otro. Aclaro nuevamente, Arduino no es multitarea, es secuencial, pero hay formas en las cuales simular y desarrollar esta multitarea gracias a la frecuencia con lo que se repite el loop y el manejo del tiempo.
Lista de materiales:
- Arduino UNO/Nano.
- 3 Led (cualquier color).
- 3 Resistencia de 330 ohm.
- 1 Resistencia 10 Kohm.
- 1 Pulsador
Diagrama de cableado / diagrama de circuito:

Link de Tinkercad
https://www.tinkercad.com/things/6qmys0hopmt
El SECRETO:
No utilizar en el código la función DELAY().
DELAY(milisegundos): Espera este tiempo declarado en milisegundo (1 segundo = 1000 Milisegundo) y no permite que el microcontrolador continúe ejecutando nada, lo «frena» ese tiempo.
Entonces utilizamos Millis(), variables y operaciones básicas matemáticas para calcular el tiempo que necesitamos.
Cargar el código:
Código totalmente modificable y adaptable a nuevas necesidades futuras, como por ejemplo, añadir más leds, otro pulsador, etc.
<pre class="EnlighterJSRAW" data-enlighter-language="c" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#define LED_1 3 //definimos los puertos donde conectaremos los leds y el pulsador.
#define LED_2 4
#define LED_3 5
#define PULSADOR 6
#define ON 1 //definimos variables globales.
#define OFF 0
#define TRUE 1
#define FALSE 0
void setup()
{
pinMode(LED_1, OUTPUT); //declaramos los leds como salida.
pinMode(LED_2, OUTPUT); //si uno no declara como salida, arduino
pinMode(LED_3, OUTPUT); //por defecto tiene declarado todo como entrada.
}
void loop()
{
ciclo_led_1(); //llamamos a cada función.
ciclo_led_2();
ciclo_led_3();
}
void ciclo_led_1() //creamos función para controlar el led_1
{
static long ultimo_cambio = 0;
static int Estado_LED = OFF;
long hora = millis();
if (hora - ultimo_cambio > 1000) {
ultimo_cambio = hora;
if (Estado_LED == ON) {
digitalWrite(LED_1, LOW);
Estado_LED = OFF;
} else {
digitalWrite(LED_1, HIGH);
Estado_LED = ON;
}
}
}
void ciclo_led_2() //creamos función para controlar el led_2
{
static long ultimo_cambio = 0;
static int Estado_LED = OFF;
long hora = millis();
if (hora - ultimo_cambio > 500) {
ultimo_cambio = hora;
Estado_LED = !Estado_LED;
digitalWrite(LED_2, Estado_LED);
}
}
void ciclo_led_3() //creamos función para controlar el led_3
{ //encenderá y apagará cuando se pulse el pulsador
digitalWrite(LED_3, digitalRead(PULSADOR));
}</pre>