Hi my friend,
I have a problem with my program. I want that if I don't use the circuit, the PIN 6 becomes LOW after "x" seconds.
I have written this code:
void loop(){
int chk = DHT.read11(DHT11_PIN);
//Gestisco il sensore di umidità e temperatura DHT11
switch (chk)
{
case DHTLIB_OK:
//Serial.print("OK,\t");
break;
case DHTLIB_ERROR_CHECKSUM:
//Serial.print("Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT:
//Serial.print("Time out error,\t");
break;
default:
//Serial.print("Unknown error,\t");
break;
}
time++;
if(time == 2500){
digitalWrite(RETROILL, LOW);
time = 0;
}
if(digitalRead(NEXT) == LOW || digitalRead(OK) == LOW || digitalRead(UP) == LOW || digitalRead(DOWN) == LOW){
digitalWrite(RETROILL, HIGH);
time = 0;
}
//Menù
if(digitalRead(NEXT) == LOW){
posizione++;
//Inizializzo le sogliee con i valori salvati nella EEPROM
tmax = EEPROM_readDouble(0);
tmin = EEPROM_readDouble(4);
//Inizializzo le sogliee con i valori salvati nella EEPROM
hmax = EEPROM_readDouble(8);
hmin = EEPROM_readDouble(12);
lcd.clear();
if ( posizione > 4 )
posizione = 0;
if ( posizione < 0 )
posizione = 4;
switch(posizione){
case 0:
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menu_principale[0]);
lcd.setCursor(0,1);
//Visualizzo i valori letti dal sensore DHT11
lcd.print((float)DHT.humidity,2);
lcd.print("% ");
lcd.print((float)DHT.temperature,2);
lcd.print("C");
posizione = -1;
time = 0;
delay(200);
break;
case 1:
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menu_principale[1]);
//Imposto le soglie di temperature
tmax = set_temp_max();
tmin = set_temp_min();
//Controllo soglie temperatura
if(tmin > tmax){
tmin = tmax - 4;
lcd.setCursor(0,1);
lcd.print(tmin);
}
//Salvo le soglie nella EEPROM
EEPROM_writeDouble(0, tmax);
EEPROM_writeDouble(4, tmin);
time = 0;
delay(200);
break;
case 2:
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menu_principale[2]);
//Imposte le soglie di umidità
hmax = set_hum_max();
hmin = set_hum_min();
//Controllo soglie umidità
if(hmin > hmax){
hmin = hmax - 10;
lcd.setCursor(0,1);
lcd.print(hmin);
}
//Salvo le soglie nella EEPROM
EEPROM_writeDouble(8, hmax);
EEPROM_writeDouble(12, hmin);
time = 0;
delay(200);
break;
case 3:
//Visualizzo le tutte le soglie impostate
lcd.clear();
lcd.setCursor(0,0);
//lcd.print(menu_principale[3]);
lcd.print("H:");
lcd.print(hmax);
lcd.print("% ");
lcd.print(hmin);
lcd.print("% ");
lcd.setCursor(0,1);
lcd.print("T:");
lcd.print(tmax);
lcd.print("C ");
lcd.print(tmin);
lcd.print("C ");
time = 0;
delay(200);
break;
case 4:
lcd.clear();
lcd.setCursor(0,0);
lcd.print(menu_principale[0]);
lcd.setCursor(0,1);
//Visualizzo i valori letti dal sensore DHT11
lcd.print((float)DHT.humidity,2);
lcd.print("% ");
lcd.print((float)DHT.temperature,2);
lcd.print("C");
posizione = -1;
time = 0;
delay(200);
break;
}
//Gestisco l'umidificatore e il riscaldatore in funzione delle soglie e dei valori letti
while(posizione == -1){
if(DHT.temperature > tmax-1){
// Serial.println("T off 1");
digitalWrite(RISCALDATORE, LOW);
}
if(DHT.temperature < tmin+1){
// Serial.print("T on 2");
digitalWrite(RISCALDATORE, HIGH);
}
if(DHT.temperature > tmin+1 && DHT.temperature < tmax-1){
// Serial.print("T on 3");
digitalWrite(RISCALDATORE, HIGH);
}
if(DHT.humidity > hmax-5){
// Serial.print("H off 1");
digitalWrite(UMIDIFICATORE, LOW);
}
if(DHT.humidity < hmin+5){
// Serial.print("H on 2");
digitalWrite(UMIDIFICATORE, HIGH);
}
if(DHT.humidity > hmin+5 && DHT.humidity < hmax-5){
// Serial.print("H on 3");
digitalWrite(UMIDIFICATORE, HIGH);
}
if(digitalRead(NEXT) == LOW){
posizione++;
}
}
}
}
But I don't understand why it doesn't go on standby when I scroll down all the menu and I come back to the "home page".
Clarification: it doesn't have to go on standby on "Temperatura" and "Umidita'' pages, but if I leave the menu on "configurazione" page, it goes on standy.
Thank you.