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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#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));
}
#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)); }
#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...

4 comentarios en «MULTITASKING BÁSICO ARDUINO»

    1. Hola!!! Gracias por el aviso, ya lo arreglé.
      Tuve problemas con el plugin que usaba para mostrar código en el sitio y al cambiarlo por otro cambió cosas que hacen referencia a html como signos < o > y los cambio por «>»
      En el video se muestra el codigo de todas maneras.
      Saludos grandes!!!

Deja una respuesta

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