Sketch unico per il mio progetto

Non del tutto completo, ma sto cercando di riunire in un solo sketch i vari singoli progetti, il codice è un po’ lungo per via della memorizzazione dei tasti del telecomando

#include <IRremote.h>
#include <IRremoteInt.h>
#include "DHT.h"
#include <LiquidCrystal.h>

#define DHTPIN 8
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//unsigned long time;

//Disegno termometro e umidità
byte termometro[8] = //icona per termometro
 {
     B00100,
     B01010,
     B01010,
     B01110,
     B01110,
     B11111,
     B11111,
     B01110
 };

byte umidita[8] = //icona per umidità
 {
     B00100,
     B00100,
     B01010,
     B01010,
     B10001,
     B10001,
     B10001,
     B01110,
 };

//variabili sistema IR 
int RECV_PIN = 6;  //IR receiver connected on pin 6
 
//Change these values to match data sent by your remote control
 
/*-----COMMANDS------*/
//NUMERI
const long tast0 = 0x8322807F;
const long tast1 = 0x83228B74;
const long tast2 = 0x83228F70;
const long tast3 = 0x8322906F;
const long tast4 = 0x83228A75;
const long tast5 = 0x8322847B;
const long tast6 = 0x83227887;
const long tast7 = 0x83228976;
const long tast8 = 0x8322837C;
const long tast9 = 0x83227788;

//TASTI DIREZIONALI
const long su = 0x83227B84; 
const long giu = 0x83228D72;
const long destra = 0x8322728D;
const long sinistra = 0x83226B94;
const long ok = 0x8322817E;

//VOLUME
const long aum = 0x8322629D;
const long dim = 0x8322639C;

const long power = 0x8322619E;
const long ledlcd = 0x83227689; //spegne e accende retro illuminazione lcd (ok funziona correttamente)
const long option = 0x8322827D; //menu per suddividere le stanze
const long mute = 0x83226E91; //visualizza temperatura e umidità terrario
const long ritorno = 0x83228E71; //riporta al menu principale
const long start = 0x83228877;

const long rew = 0x83228778; 
const long previous = 0x83227F80;
const long next = 0x83227A85;
const long fwd = 0x8322758A;
const long rec = 0x8322738C;
const long ferma_eject = 0x8322857A;
const long play_pausa = 0x83227986;
const long slow = 0x83227D82;

//ROTELLE
  //24-BIT
const long b_alto = 0x8322926D;
const long b_basso = 0x8322936C;
const long b_pressione = 0x8322916E;
  
  //CMSS
const long cmss_alto = 0x8322946B;
const long cmss_basso = 0x8322956A;
const long cmss_pressione = 0x8322718E;
  
  //EAX
const long eax_alto = 0x83229669;
const long eax_basso = 0x83229768;
const long eax_pressione = 0x83228C73;

  //3DMIDI
const long midi_alto = 0x83229966; 
const long midi_basso = 0x83229A65;
const long midi_pressione = 0x83229867;

/*-----END COMMANDS------*/
 
IRrecv irrecv(RECV_PIN);  //initialize IR library on RECV_PIN
decode_results results;   //received data will be stored here
 
void setup() {
  pinMode (13, OUTPUT);  
  pinMode (7, OUTPUT);
  
  digitalWrite (7, HIGH);
  digitalWrite (13, LOW);
  
  lcd.begin(16, 2);
      lcd.setCursor(0, 0);
        lcd.print("SISTEMA REBECCA");
      lcd.setCursor(0, 1);
        lcd.print("IN FUNZIONE");
     delay(2000);
 lcd.clear();
 
 dht.begin();
   lcd.createChar(1, termometro);
   lcd.createChar(2, umidita);
   
 //time=millis();
   
 irrecv.enableIRIn();  // Start the receiver 
}
 
void loop() {
//time=millis();

  if (irrecv.decode(&results)) {
    switch(results.value){  //fetch received data
     
      case ledlcd:
        if (digitalRead(7) == HIGH) {
              digitalWrite(7, LOW);
              }
          else { 
                 digitalWrite(7, HIGH); 
             }
         delay(100);    
       break;
      
      case tast0:
      lcd.print("Luce esterna");
        if (digitalRead(13) == HIGH) {
            digitalWrite(13, LOW); 
           }
           else {
               digitalWrite(13, HIGH);
           }
           delay(500); 
        lcd.clear();      
     break;
    
    case mute:    
    lcd.clear();
      digitalWrite(7, HIGH); 
        lcd.print("Sistema Terrario"); 
          Terrario();      
           delay(500); 
     break;  
     
     case ritorno:
          Messaggio_Inizio();
     break;  
     
  }
   
   
   irrecv.resume(); // Receive the next value
 }
}

void Terrario() { 
  delay (1000);
  
  float h = dht.readHumidity();
  int t = dht.readTemperature();
  float f = dht.readTemperature(true);
  
  if (isnan(h) || isnan(t) || isnan(f)) {
    lcd.setCursor(0, 0);
      lcd.print("Lettura fallita del sensore DHT");
    return;
  }
  
  float hi = dht.computeHeatIndex(f, h);
  
   lcd.setCursor(0, 1);
     lcd.print((char) 1);
        lcd.print(t); 
         lcd.print((char)223); 
          lcd.print("C ");
    lcd.setCursor(7, 1);      
      lcd.print((char) 2);
         lcd.print(h);
}

void Messaggio_Inizio() {
  lcd.clear();
    lcd.setCursor(0, 0);
        lcd.print("SISTEMA REBECCA");
      delay(2000);
    digitalWrite(7, LOW);
}
  • il mio problema riguarda il ciclo del terrario, ho un sensore DHT11 una volta che premo il tasto sul telecomando per visualizzarlo mi compare la riga con i dati raccolti dal sensore, il problema è che nn si aggiorna finchè nn ripremo il tasto, c’è un modo per far si che si aggiorni automaticamente? Nn sono stato buono di risolvere il problema al momento

  • siccome metto il sensore DHT11 dentro il terrario una volta al giorno se necessario nebulizzo l’interno, pensavo di coprire e proteggere il sensore lasciando aperto solo la parte forata del sensore, c’è qualche possibilità che vada in corto se l’acqua penetra da quei fori?

-nel telecomando ho 4 tasti direzionali, pensavo di sfruttarli per muovermi in una specie di menu, uno scrool dx, sx e uno scrool alto e basso, facendo lampeggiare la riga su cui mi sono soffermato (per rendere la cosa più semplice pensavo di far lampeggiare solo la prima riga) il tutto usando un lcd 16X2. Che dite è ambizioso o si può fare?