Arduino: Ejecutando todo al mismo tiempo

  1. Sin Delay

Para muchos de los que inician en el mundo de Arduino, quieren que su arduino ejecute varias tareas al mismo tiempo, y la pregunta es como si tenemos nuestro código bien!, pero seguramente este tiene varios delay().

Ningún microcontrolador puede hacer varias tareas al mismo pero el no usar delay() hace ver que está ejecutando todo al mismo tiempo ya que no hay ningún retardo ni interrupciones en el codigo y la velocidad de ejecución es realmente alta lo cual nos da a persivir que todo lo hace al mismo tiempo.

Si!, el secreto esta en no usar el delay,¿Pero entonces como hacemos un retardo o como hacemos para que encienda y se apague un led y adicionalmente suene un buzzer o se ejecute cualquier otra cosa?, llevando o manteniendo el control mediante variables que almacenan el tiempo de ejecución, y verificando mediante «if» si se ha logrado o ya ha pasado el tiempo requerido para ejecutar alguna acción. Se lee algo enredado pero haciendo el código es mucho mas fácil. por eso vamos a explicar el ejemplo que tiene nuestro Arduino IDE, asi que vamos abrir el IDE y abrir el siguiente ejemplo:

archivo>ejemplos>digital>BlinkWithoutDelay

Este código encenderá y apagara un led sin usar la función delay(), ya que esta función nos genera que un retardo en el cual nuestro código se detendrá y no realizara ninguna otra función hasta que este retardo se acabe, como si empezaras a descargar un juego que pesa 1,5GB y no te movieras del frente de tu computadora hasta que se descargue sin realizar ninguna otra tarea.

depende de la necesidad de nuestro proyectos sera viable usar o no delays.

BLINK WITH OUT DELAY:

Entonces el secreto esta en ir validando el tiempo a medida que se ejecutan varias tareas, debemos utilizar variables de control y varias variables que nos mantenga cierto tiempo almacenado para poder ejecutar varias tareas. por ejemplo:

les dejare en los siguientes links códigos donde se ejecutan varias tareas y se usan varias variables de control y de tiempo para que traten de entenderlo.

Códigos:

Robot Evita Obstaculos combina delays y ejecuta tareas sin delays, código directo descargar AQUI!.

Robot Animador, todo su código es sin delays, y ejecuta tareas como escribir en una matrix led 8×8, mueve 2 servo motores, enciende varios leds y activa un buzzer, código directo descargar AQUI!.

Cualquier duda no olviden en dejarme su comentario no dudare en contestarles

No olviden seguirme en las redes sociales y suscribirse a mi canal de youtube

 

2 comentarios en “Arduino: Ejecutando todo al mismo tiempo

  • amigo soy nuevo en arduino lo estoy estudiando y practicando necesitoayuda con un codigo que estoy haciendo aficionadamente como hobby pero de lo que entiendo lo hago dejo el codigo para su sabia interpretacion y modificacion:
    #include

    #include

    LiquidCrystal_I2C lcd(0x3F,20,4); //0X27F – 0X20F

    #include «DHT.h»
    #define DHTPIN 12
    #define DHTTYPE DHT11 //DHT22
    DHT dht(DHTPIN, DHTTYPE);
    int rele=13;
    int msg = 0;
    int vcc= 11; //crear pines de 5v
    int control = 8;
    int empezar = 1024;
    int contador = 20; //
    int prevmillis =0;
    int ventilador =7;
    int rele2=12;
    unsigned long tAntes ; // tiempo
    unsigned long tAhora; //tiempo_guardado
    unsigned long tEjecucion= 1000;

    void setup() {
    lcd.init();
    lcd.backlight();
    lcd.clear();
    pinMode(rele,OUTPUT);
    pinMode(rele2,OUTPUT);
    pinMode(vcc,OUTPUT);
    pinMode(control, OUTPUT);
    pinMode(ventilador,OUTPUT);
    digitalWrite(rele,LOW);
    msg = 0;
    empezar =1024;
    dht.begin();

    }

    void loop(){

    if(msg==0)
    {
    lcd.setCursor(1,0);
    lcd.print(«PROBISERVINDUSTRIAL»);
    lcd.setCursor(0,1);
    lcd.print(» Incubadora de Aves «);
    lcd.setCursor(0,2);
    lcd.print(«Contacto: 0989883698»);
    lcd.setCursor(0,3);
    lcd.print(«solarmnt@hotmail.com»);
    delay(10000);
    msg = 1;
    lcd.clear();
    }
    digitalWrite(vcc,HIGH);
    int h= dht.readHumidity(); // Lee la humedad
    int t= dht.readTemperature();

    tAntes=millis(); //
    if (tAntes-tAhora>=1000){

    //produce un evento cada 1000 milisegundo (1 seg) //

    tAhora=tAntes; //
    if (contador >0 ){ //
    contador –; //
    }
    else{
    digitalWrite(control, HIGH);

    delay (200); // Enciende el led
    digitalWrite(rele, HIGH);
    // Enciende el led
    contador =19;

    // digitalWrite(control, LOW); // Apaga el led hasta el siguiente paso por 0
    }

    }

    //lcd.clear();//Elimina todos los simbolos del LCD
    lcd.setCursor(0,0);//Posiciona la primera letra despues del segmento 5 en linea 1
    lcd.print(«EXTRACTOR FAN: «);//
    lcd.setCursor(14,0);
    //lcd.print(rele);
    lcd.print(» «);

    lcd.setCursor(0,1);
    lcd.print(«VOLTEO DE HVS:»);
    lcd.setCursor(14,1);
    lcd.print(» «);

    lcd.setCursor(0,2);
    lcd.print(«HUMEDAD: «);
    lcd.setCursor(13,2);
    lcd.print(h);//Escribe la temperatura
    lcd.print(«%H «);
    //delay(2000);

    lcd.setCursor(0,3);

    lcd.print(«TEMPERATURA: «);
    lcd.setCursor(13,3);
    lcd.print(t);//Escribe la temperatura
    lcd.print(«C «);
    delay (2000);

    if(t>25)
    {
    digitalWrite(rele,LOW);
    delay(500);
    digitalWrite(rele,HIGH);
    lcd.clear();
    //lcd.setCursor(0,0);
    //lcd.print(«diagnostico»);
    //lcd.print(rele);
    // lcd.setCursor(0,1);
    //lcd.print(«extractor on»);
    delay(1500);
    }
    else if (t>=30 && t<29)
    {
    digitalWrite(rele,HIGH);
    } else {
    digitalWrite(rele,LOW);
    lcd.clear();

    //lcd.setCursor(0,0);
    ////lcd.print("diagnostico ");
    //lcd.print(ventilador);
    //lcd.setCursor(0,1);
    //lcd.print("Calor apagado");
    delay(1500);
    }

    }
    lo que busco es que el prgrama me presente por pantalla temperatura humedad y me permita lo siguiente:
    activar un fan si la temperatura exceda la programada
    el volteo que se presente por pantalla solo si esta acv o off
    y lo mas importante que la pantalla deje de parpadear por el delay los muchos que tiene este programa
    gracias por sus comentarios

Deja un comentario

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