Saltar al contenido

MULTITASKING BÁSICO ARDUINO

MULTITASKING BÁSICO ARDUINO

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:

Multitasking Básico con Arduino
Multitasking Básico con Arduino

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.

#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));
}
No te olvides de compartir en...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *