Problema con codigo que se sobrepone

Estoy teniendo un problema con este codigo que lee temperatura y humedad de un sensor dht 11mostrando llas mediciones en un display 16x2 y a la vez debe encenderse y apagarse el pin 9. Al poner el temporizado la pantalla deja de funcionar... Parece que el delay se sobrepone a la pantalla y por eso no hay imagen... Que debo modificar?

Hola @THEJULAITOR
Utilice millis () en lugar de retrasos

RV mineirin

Moderador:
Por favor lee las normas del foro y edita tu código usando etiquetas.

#include <LiquidCrystal.h>
#include <DHT.h>


int SENSOR = 8;
const int volteoPIN = 9;
int VO = 0;
int RS = 2;
int E = 3;
int D4 = 4;
int D5 = 5;
int D6 = 6;
int D7 = 7;

int temp;
int humedad;

DHT dht (SENSOR, DHT11);
LiquidCrystal lcd (RS, E, D4, D5 ,D6, D7);

void setup(){
  dht.begin();
  
  lcd.begin(16, 2); 
  analogWrite(VO, 50); //contraste
  pinMode(volteoPIN , OUTPUT); 
}    
void loop(){
    digitalWrite(volteoPIN , HIGH);  
    delay(1800000);                   
    digitalWrite(volteoPIN , LOW);   
    delay(7200);                  
    humedad = dht.readHumidity();
    temp = dht.readTemperature();

    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Temperatura: ");
    lcd.print(temp);
    lcd.print("C");
    lcd.setCursor(0,1);
    lcd.print("Humedad: ");
    lcd.print(humedad);
    lcd.print("%");
    delay(5000);
    
}

Gracias ruilviana voy a probar así... Y cualquier cosa comento que pasa...

¿Sos consciente de que ese delay de 1800000 mseg equivale a 30 minutos con el micro "parado" sin hacer nada, pero nada de nada?

Saludos

Correcto soy consciente por eso quería cambiar el código a fin de que eso no pase... Y la función millis me lo permite... Ahora estoy tratando de implementarlo...

En Documentacíon tienes muy buenos tutoriales de mills

Cuéntanos cuál es la intención de poner el delay de 30 minutos.
O sea, sé más específico que en tu primer post.

Así como está, el pin 9 se pone en HIGH durante 30 minutos, luego se pone en LOW durante 12.2 (7.2 + 5) segundos y se repite el ciclo, 30 min - 12.2 seg , indefinidamente.

¿Esa es realmente tu intención?

Saludos

Ya quedo solucionado el problema con la función millis... Gracias por la sugerencia!

Mira tu ejemplo BlinkWithoutDelay.ino en el IDE y tienes tu respuesta.
Pero los tutoriales te darán el conocimiento general, y luego puedes aplicarlo a tu caso.
Tu código es francamente desproporcionado.

/* Comenta esto y verás que pasa 
    digitalWrite(volteoPIN , HIGH);  
    delay(1800000);                   
    digitalWrite(volteoPIN , LOW);   
    delay(7200);                  
*/
    humedad = dht.readHumidity();
    temp = dht.readTemperature();

    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Temperatura: ");
    lcd.print(temp);
    lcd.print("C");
    lcd.setCursor(0,1);
    lcd.print("Humedad: ");
    lcd.print(humedad);
    lcd.print("%");
    delay(5000); // este delay tmb es grande, elimínalo.

siguen los problemas... ahora el pin 9 no apaga nunca salvo que use un tiempo de unos segundos. la idea es encender un motor con un relay de los que tienen que estar a 0v para encender para que este 7.250 segundos prendido y media hora apagado. no se puede usar millis para tanto tiempo?

#include <LiquidCrystal.h>
#include <DHT.h>

boolean estadoLed = true;  
int intervaloEncendido = 1800000; 
int IntervaloApagado = 7250; 
unsigned long tiempoAnteriorEncendido = 0; 
unsigned long tiempoAnteriorApagado = 0;  

int SENSOR = 8;
int VO = 0;
int RS = 2;
int E = 3;
int D4 = 4;
int D5 = 5;
int D6 = 6;
int D7 = 7;

int temp;
int humedad;

DHT dht (SENSOR, DHT11);
LiquidCrystal lcd (RS, E, D4, D5 ,D6, D7);

void setup(){
  dht.begin();
  
  lcd.begin(16, 2);
   
  pinMode(13,OUTPUT); 
  digitalWrite(13,estadoLed); 
}    
void loop(){

    if((millis()-tiempoAnteriorEncendido>=intervaloEncendido)&&estadoLed==true){ 
    estadoLed=false; 
    digitalWrite(13,estadoLed); 
    tiempoAnteriorApagado=millis(); 
  }
   if((millis()-tiempoAnteriorApagado>=IntervaloApagado)&&estadoLed==false){ 
    estadoLed=true; 
    digitalWrite(13,estadoLed); 
    tiempoAnteriorEncendido=millis(); 
  }
    
    humedad = dht.readHumidity();
    temp = dht.readTemperature();

    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Temperatura: ");
    lcd.print(temp);
    lcd.print("C");
    lcd.setCursor(0,1);
    lcd.print("Humedad: ");
    lcd.print(humedad);
    lcd.print("%");
    delay(500);   
   
   
}

A ver ahora con estas correcciones?

#include <LiquidCrystal.h>
#include <DHT.h>

boolean estadoLed       = true;  
int intervaloEncendido  = 1800000; 
int IntervaloApagado    = 7250; 
unsigned long tiempoAnteriorEncendido; 
unsigned long tiempoAnteriorApagado;  
unsigned long tiempoPresento;

int SENSOR = 8;
int VO = 0;
int RS = 2;
int E = 3;
int D4 = 4;
int D5 = 5;
int D6 = 6;
int D7 = 7;

int temp;
int humedad;

DHT dht (SENSOR, DHT11);
LiquidCrystal lcd (RS, E, D4, D5 ,D6, D7);

void setup(){
  dht.begin();
  
  lcd.begin(16, 2);
   
  pinMode(13,OUTPUT); 
  digitalWrite(13,estadoLed); 
}    

void loop(){

    if ((millis()-tiempoAnteriorEncendido >= intervaloEncendido) && estadoLed){ 
        estadoLed = false; 
        digitalWrite(13, estadoLed); 
        tiempoAnteriorEncendido = millis(); 
    }
    if (millis()-tiempoAnteriorApagado >= IntervaloApagado && !estadoLed){ 
        estadoLed = true; 
        digitalWrite(13, estadoLed); 
        tiempoAnteriorApagado = millis(); 
    }
    
    if (millis()-tiempoPresento > 500UL) {
        humedad = dht.readHumidity();
        temp = dht.readTemperature();

        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Temperatura: ");
        lcd.print(temp);
        lcd.print("C");
        lcd.setCursor(0,1);
        lcd.print("Humedad: ");
        lcd.print(humedad);
        lcd.print("%");
        //delay(500);   
    }
}

Lamentablemente el problema sigue igual. Nunca queda el pin en low digamos... No se si hay algo mas que se puede hacer?

Prueba la parte de los leds y luego agrega lo demás

#include <Arduino.h>


boolean estadoLed       = false;  
int intervaloEncendido  = 1000; 
int IntervaloApagado    = 3000; 
unsigned long tiempoAnteriorEncendido; 
unsigned long tiempoAnteriorApagado;  
unsigned long tiempoPresento;
enum {ENCENDIDO, APAGADO};

void setup(){
  pinMode(13,OUTPUT); 
  digitalWrite(13,estadoLed); 
}    

void loop(){

    switch(estadoLed) {
      case APAGADO: if ((millis()-tiempoAnteriorEncendido >= intervaloEncendido)){ 
                          estadoLed = ENCENDIDO; 
                          digitalWrite(13, estadoLed); 
                          tiempoAnteriorApagado = millis(); 
                      }
                      break;
      case ENCENDIDO: if (millis()-tiempoAnteriorApagado >= IntervaloApagado){ 
                          estadoLed = APAGADO; 
                          digitalWrite(13, estadoLed); 
                          tiempoAnteriorEncendido = millis(); 
                      }
                      break;                      
    }
}

Probado y funcionando.
Ahora respeta los tiempos de ON y OFF.

sigue fallando. no se si es mi arduino que esta roto... ya con un minuto falla. proba el codigo asi si es posible para saber si tambien te falla.

#include <Arduino.h>


boolean estadoLed       = false;  
int intervaloEncendido  = 60000; 
int IntervaloApagado    = 10000; 
unsigned long tiempoAnteriorEncendido; 
unsigned long tiempoAnteriorApagado;  
unsigned long tiempoPresento;
enum {ENCENDIDO, APAGADO};

void setup(){
  pinMode(13,OUTPUT); 
  digitalWrite(13,estadoLed); 
}    

void loop(){

    switch(estadoLed) {
      case APAGADO: if ((millis()-tiempoAnteriorEncendido >= intervaloEncendido)){ 
                          estadoLed = ENCENDIDO; 
                          digitalWrite(13, estadoLed); 
                          tiempoAnteriorApagado = millis(); 
                      }
                      break;
      case ENCENDIDO: if (millis()-tiempoAnteriorApagado >= IntervaloApagado){ 
                          estadoLed = APAGADO; 
                          digitalWrite(13, estadoLed); 
                          tiempoAnteriorEncendido = millis(); 
                      }
                      break;                      
    }
}

Arranca apagado 10 segundos, eso esta bien. El problema es que despues no vuelve a apagar a los 60 segundos.

Lo acabo de probar y funciona bien.
Ojo que solo enciende y apaga el LED de la placa (pin 13).
Mas arriba dices que tienes el relé en el pin 9, conecta el relé al pin 13 o cambia 13 por 9 en el código.

Saludos