¡Ayuda con los bucles de Arduino por favor! [cerrado]

0

Tengo un Arduino Uno y he creado un dispositivo para humidificar el recinto de mi Tortuga. El dispositivo consta de un sensor de temperatura y humedad, una pantalla LCD para mostrar la temperatura y la humedad y una bomba de agua, que se enciende si la humedad está por debajo de cierto punto.

Configuro que el programa realice un ciclo cada diez minutos, para no inundar el gabinete con demasiada agua, pero por supuesto eso significa que la pantalla LCD solo se actualiza cada diez minutos también. Quiero que la pantalla LCD se actualice cada pocos segundos, pero la bomba solo se enciende 10 minutos después de que ya esté encendida si la humedad es aún demasiado baja.

¿Cómo puedo hacer esto?

Aquí está mi código ...

#include <dht.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

dht DHT;

#define DHT11_PIN 7
int pump = 13;

void setup(){
  pinMode(pump, OUTPUT);
  lcd.begin(16, 2);
}

void loop()
{
  int chk = DHT.read11(DHT11_PIN);
  int hum = DHT.humidity;
  lcd.setCursor(0,0); 
  lcd.print("Temp: ");
  lcd.print(tmp);
  lcd.print((char)223);
  lcd.print("C");
  lcd.setCursor(0,1);
  lcd.print("Humidity: ");
  lcd.print(hum);
  lcd.print("%");

  if(hum <= 70) {
    digitalWrite(pump, HIGH);
    delay(2000);
    digitalWrite(pump, LOW);
  }
  else{
    digitalWrite(pump, LOW);
  }

  delay(600000);
}

¡Gracias por tu ayuda! =]

    
pregunta IKnowNothing

1 respuesta

1

En lugar de un delay largo, use una marca de tiempo de la última vez que ejecutó la bomba y compárela con millis ():

// add to globals under pump

unsigned long lastRun = 0;


if(millis() - lastRun > 60*1000){
  if(hum <= 70) {
    digitalWrite(pump, HIGH);
    delay(2000);
    digitalWrite(pump, LOW);
    lastRun = millis();
  }
  else{
    digitalWrite(pump, LOW);
  }
}

Esto se puede usar de muchas maneras para evitar el uso de delay() en absoluto.

    
respondido por el ratchet freak

Lea otras preguntas en las etiquetas