#include <Wire.h> // richiama la libreria Wire che riconosce la seriale I2C
#include <RTClib.h> // richiama la libreria dell'orologio RTC
#include <LiquidCrystal.h> // Dichiara la "Libreria" che il display LCD
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // Pin digitali dedicati al display LCD
// Definizione del carattere personalizzato per il simbolo del grado Celsius
byte degreeSymbol[8] = {0b00110,0b01001,0b01001,0b00110,0b00000,0b00000,0b00000,0b00000};
int ENTER; // Dichiara la Variabile "ENTER"
int SU; // Dichiara la Variabile "SU"
int GIU; // Dichiara la Variabile "GIU"
const int sensorPin1 = A0; // Pin analogico collegato al sensore 1
const int sensorPin2 = A1; // Pin analogico collegato al sensore 2
const int sensorPin3 = A2; // Pin analogico collegato al sensore 3
const int sensorPin4 = A3; // Pin analogico collegato al sensore 4
const int ledAzzPin = 22; // Dichiara la Variabile "ledAzzurroPin" allo stato logico del Pin 22
const int ledRosaPin = 23; // Dichiara la Variabile "ledRosaPin" allo stato logico del Pin 23
const int ledVerdePin = 24; // Dichiara la Variabile "ledVerdePin" allo stato logico del Pin 24
const int ledGialPin = 25; // Dichiara la Variabile "ledGialloPin" allo stato logico del Pin 25
const int ledRossoPin = 26; // Dichiara la Variabile "ledRossoPin" allo stato logico del Pin 26
const int ledBluPin = 27; // Dichiara la Variabile "ledBluPin" allo stato logico del Pin 27
const int ledAranPin = 28; // Dichiara la Variabile "ledArancioPin" allo stato logico del Pin 28
unsigned long timeSet=0; // Variabile per memorizzare il tempo per l'impostazione
//int setModeTime=2000;
int stato = 0; // variabile su cui scorrono tutte le sigole selezioni dei menù
// int SelMenu = 0; // variabile che stabilisce quale menù è attivo (0: Principale - 1: Impost Data e Ora - 2: ingressi analogici 3: Uscite digitali)
char buffer[10];
bool FIRST = true; // variabile da attivare a True prima di effettuare una scrittura su LCD quando si entra in un nuovo flag
RTC_DS1307 rtc; // Inizializza l'oggetto RTC_DS1307 chiamandolo "RTC"
DateTime now; // dichiara una variabile "now" che contiene l'oggetto "DateTime" che contiene l'stante temporale
int _day = now.day(); // Ottiene il giorno attuale
int _month = now.month(); // Ottiene il mese attuale
int _year = now.year(); // Ottiene l'anno attuale
int _hour = now.hour(); // Ottiene l'ora attuale
int _min = now.minute(); // Ottiene il minuto attuale
int _sec = now.second(); // Ottiene il secondo attuale
void setup() {
pinMode(8 , INPUT); // inizializza pin 8 legato alla variabile "ENTER" come ingresso digitale
pinMode(9 , INPUT); // inizializza pin 9 legato alla variabile "SU" come ingresso digitale
pinMode(10, INPUT); // inizializza pin 10 legato alla variabile "GIU" come ingresso digitale
pinMode(ledAzzPin, OUTPUT); // inizializza pin legato alla variabile "ledAzzurroPin" come uscita digitale
pinMode(ledRosaPin, OUTPUT); // inizializza pin legato alla variabile "ledRosaPin" come uscita digitale
pinMode(ledVerdePin, OUTPUT); // inizializza pin legato alla variabile "ledVerdePin" come uscita digitale
pinMode(ledGialPin, OUTPUT); // inizializza pin legato alla variabile "ledGialloPin" come uscita digitale
pinMode(ledRossoPin, OUTPUT); // inizializza pin legato alla variabile "ledRossoPin" come uscita digitale
pinMode(ledBluPin, OUTPUT); // inizializza pin legato alla variabile "ledBluPin" come uscita digitale
pinMode(ledAranPin, OUTPUT); // inizializza pin legato alla variabile "ledArancioPin" come uscita digitale
lcd.createChar(1, degreeSymbol);
Wire.begin(); // Inizializza la comunicazione I2C
rtc.begin(); // Inizializza il timer RTC
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.clear();
if (! rtc.isrunning()) { // Se il RTC non sta funzionando o non è collegato,
Serial.println("RTC is NOT running!");
rtc.adjust(DateTime(__DATE__, __TIME__)); // imposta la data/ora con quella dello sketch
}
Serial.begin(9600);
}
void loop() {
ENTER = digitalRead(8);
SU = digitalRead(9);
GIU = digitalRead(10);
switch(stato) {
case 0:
loopPrinc(); // Richiama il livello principale di - selezione 0 - 0
break;
case 1:
loop10(); // livello - selezione principale 1 - 0
break;
case 2:
loop11(); // livello - selezione 1 - 1 ritorna alla selezione 1 - 0
break;
case 3:
loop12(); // livello - selezione 2 - 1
break;
case 4:
loop13(); // livello - selezione 3 - 1
break;
case 5:
loop14(); // livello - selezione 4 - 1
break;
case 6:
loop15(); // livello - selezione 5 - 1
break;
case 7:
loop16(); // livello - selezione 6 - 1 ritorna alla selezione 1 - 1
break;
case 8:
loop20(); // livello - selezione principale 2 - 0
break;
case 9:
loop21(); // livello - selezione 1 - 2 ritorna alla selezione 2 - 0
break;
case 10:
loop22(); // livello - selezione 2 - 2
break;
case 11:
loop23(); // livello - selezione 3 - 2
break;
case 12:
loop24(); // livello - selezione 4 - 2 ritorna alla selezione 1 - 2
break;
case 13:
loop30(); // livello - selezione principale 3 - 0 ritorna alla selezione 1 - 0
break;
case 14:
loop31(); // livello - selezione 1 - 3 ritorna alla selezione 3 - 0
break;
case 15:
loop32(); // livello - selezione 2 - 3
break;
case 16:
loop33(); // livello - selezione 3 - 3
break;
case 17:
loop34(); // livello - selezione 4 - 3
break;
case 18:
loop35(); // livello - selezione 5 - 3
break;
case 19:
loop36(); // livello - selezione 6 - 3
break;
case 20:
loop37(); // livello - selezione 7 - 3 ritorna alla selezione 1 - 3
break;
case 21:
loop1(); // Visualizzazione 1 - Data/Ora
break;
case 22:
loop2(); // Visualizzazione 2 - Temperatura piano terra
break;
case 23:
loop3(); // Visualizzazione 3 - Temperatura primo piano
break;
case 24:
loop4(); // Visualizzazione 4 - Temperatura secondo piano
break;
}
}
void setStato(int s) { // variabile che permette di cambiare lo stato di avanzamento del menù
stato = s; // valore dello "stato" in cui vogliamo finire
FIRST = true; // variabile da attivare a True prima di effettuare una scrittura quando si entra in un nuovo flag
delay(20); // aggiunge un po' di ritardo
}
void loopPrinc() { // funzione loopPrinc: - Intestazione case:0
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Sistema ");
lcd.setCursor(0, 1);
lcd.print(" centralizzato ");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(21);delay(200);lcd.clear();} // se viene premuto "ENTER" va allo stato 10 Case: 1 - "Data/Ora"
}
void loop10() { // funzione loop 10: - case:1 "Impostazione Data e Ora" 1-0
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Impostazione ");
lcd.setCursor(0, 1);
lcd.print(" Data e Ora ");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(8);delay(200);} // se viene premuto "SU" va allo stato 20 - Case: 8 "Temperature" 2-0
if (GIU == HIGH){setStato(0);delay(200);} // se viene premuto "GIU" torna allo stato loopPrinc - Case: 0 - "Intestazione" 0-0
if (ENTER == HIGH){setStato(2);delay(200);lcd.clear();}// se viene premuto "ENTER" va allo stato 11 - Case: 2 - imposta "Giorno:" 1-1
}
void loop11() { // funzione loop 11: - case:2 - imposta "Giorno:" 1-1
DateTime now = rtc.now(); // Variabile su cui viene copiata la data/ora attuale dall' RTC
lcd.setCursor(0, 0); // predispone la scrittura sulla prima riga del display lcd
if (SU == HIGH && _day < 31) { _day++; } // premendo "PIU" il giorno aumenta fino a 31
if (GIU == HIGH && _day > 1) { _day--; } // premendo "MENO" il giorno diminuisce fino a 1
delay(200); // priccolo ritardo sulla pressione dei pulsanti
sprintf(buffer,"%s: %02d","Giorno", _day); // Formatta il messaggio con la scritta "Giorno"
lcd.print( buffer ); // scrive il valore del "giorno" prelevato da RTC
if (ENTER == HIGH){ setStato(3);} // premendo "ENTER" passa al parametro successivo
}
void loop12() { // funzione loop 12: - case:3 - imposta "Mese:" 2-1
DateTime now = rtc.now(); // Variabile su cui viene copiata la data/ora attuale dall' RTC
lcd.setCursor(0, 0); // predispone la scrittura sulla prima riga del display lcd
if (SU == HIGH && _month < 12) { _month++; } // premendo "PIU" il mese aumenta fino a 12
if (GIU == HIGH && _month > 1) { _month--; } // premendo "MENO" il mese diminuisce fino a 1
delay(200); // priccolo ritardo sulla pressione dei pulsanti
sprintf(buffer,"%s: %02d","Mese", _month); // Formatta il messaggio con la scritta "Mese"
lcd.print( buffer ); // scrive il valore del "Mese" prelevato da RTC
if (ENTER == HIGH){setStato(4);} // premendo "ENTER" passa al parametro successivo
}
void loop13() { // funzione loop 13: - case:4 - imposta "Anno:" 3-1
DateTime now = rtc.now(); // Variabile su cui viene copiata la data/ora attuale dall' RTC
lcd.setCursor(0, 0); // predispone la scrittura sulla prima riga del display lcd
if (SU == HIGH && _year < 2070) { _year++;} // premendo "PIU" l'anno aumenta fino a 2070
if (GIU == HIGH && _year > 2020) { _year--;} // premendo "MENO" l'anno diminuisce fino 2020
delay(200); // priccolo ritardo sulla pressione dei pulsanti
sprintf(buffer,"%s: %02d","Anno", _year); // Formatta il messaggio con la scritta "Anno"
lcd.print( buffer ); // scrive il valore dell' "Anno" prelevato da RTC
if (ENTER == HIGH){ setStato(5);} // premendo "ENTER" passa al parametro successivo
}
void loop14() { // funzione loop 14: - case:5 - imposta "Ore:" 4-1
DateTime now = rtc.now(); // Variabile su cui viene copiata la data/ora attuale dall' RTC
lcd.setCursor(0, 0); // predispone la scrittura sulla prima riga del display lcd
if (SU == HIGH && _hour < 24) { _hour++; } // premendo "PIU" l'ora aumenta fino a 24
if (GIU == HIGH && _hour > 1) { _hour--; } // premendo "MENO" l'ora diminuisce fino 1
delay(200); // priccolo ritardo sulla pressione dei pulsanti
sprintf(buffer,"%s: %02d","Ore", _hour); // Formatta il messaggio con la scritta "ora"
lcd.print( buffer ); // scrive il valore dell' "Anno" prelevato da RTC
if (ENTER == HIGH){setStato(6);} // premendo "ENTER" passa al parametro successivo
}
void loop15() { // funzione loop 15: - case:6 - imposta "Minuti:" 5-1
DateTime now = rtc.now(); // Variabile su cui viene copiata la data/ora attuale dall' RTC
lcd.setCursor(0, 0); // predispone la scrittura sulla prima riga del display lcd
if (SU == HIGH && _min < 60) { _min++; } // premendo "PIU" i minuti aumentano fino a 60
if (GIU == HIGH && _min > 0) { _min--; } // premendo "MENO" i minuti diminuisce fino a 0
delay(200); // priccolo ritardo sulla pressione dei pulsanti
sprintf(buffer,"%s: %02d","Minuti", _min); // Formatta il messaggio con la scritta "Minuti"
lcd.print( buffer ); // scrive il valore dei "Minuti" prelevato da RTC
if (ENTER == HIGH){setStato(7);} // premendo "ENTER" passa al parametro successivo
}
void loop16() { // funzione loop 16: - case:7 - imposta "Secondi:" 6-1
DateTime now = rtc.now(); // Variabile su cui viene copiata la data/ora attuale dall' RTC
lcd.setCursor(0, 0); // predispone la scrittura sulla prima riga del display lcd
if (SU == HIGH && _sec < 60) { _sec++; } // premendo "PIU" i secondi aumentano fino a 60
if (GIU == HIGH && _sec > 0) { _sec--; } // premendo "MENO" i secondi diminuisce fino a 0
delay(200); // priccolo ritardo sulla pressione dei pulsanti
sprintf(buffer,"%s: %02d","Secondi", _sec); // Formatta il messaggio con i secondi e la scritta "secondi"
lcd.print( buffer ); // scrive il valore dei "Secondi" prelevato da RTC
if (ENTER == HIGH){ // premendo "ENTER" passa al parametro successivo
rtc.adjust(DateTime(_year, _month, _day, _hour, _min, _sec)); // salva l'impostazione "Data e Ora" nel dispositivo RTC
lcd.setCursor(0, 1);
lcd.print(" Salvato ");
delay(1000);
lcd.clear();
setStato(1); // se viene premuto "ENTER" va allo stato 11 - "Impostazione Data e Ora" 1-0
}
}
void loop20() { // funzione loop 20: - case:8 "Menu Base 2" 2-0
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Temperature ");
lcd.setCursor(0, 1);
lcd.print(" Abitazione ");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(13);delay(200);} // se viene premuto "SU" va allo stato 30 - Case: 13 "Menu Base 3" 3-0
if (GIU == HIGH){setStato(1);delay(200);} // se viene premuto "GIU" torna allo stato 10 - Case: 1 "Menu Base 1" 1-0
if (ENTER == HIGH){setStato(9);delay(200);} // se viene premuto "ENTER" va allo stato 21 - Case: 9 - "sub Menù" 2-1
}
void loop21() { // funzione loop 21: - case:9 - "sub Menù" 1-2
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Piano Terra ");
lcd.setCursor(0, 1);
lcd.print("<:DN ENT: UP:>");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(10);delay(200);} // se viene premuto "SU" va allo stato loop 22: - case:10 - "sub Menù" 2-2
if (GIU == HIGH){setStato(8);delay(200);} // se viene premuto "GIU"" torna allo stato loop 20: - case:8 - "Menu Base 2" 2-0
if (ENTER == HIGH){
delay(200);
// Esegue operazione programmata nel Loop 21 - case:9 - "Sub Menù" 1-2
}
}
void loop22() { // funzione loop 22: - case:10 - "sub Menù" 2-2
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Primo Piano ");
lcd.setCursor(0, 1);
lcd.print("<:DN ENT: UP:>");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(11);delay(200);} // se viene premuto "SU" va allo stato loop 23: - case:11 - "sub Menù" 3-2
if (GIU == HIGH){setStato(9);delay(200);} // se viene premuto "GIU"" torna allo stato loop 21: - case:9 - "sub Menù" 1-2
if (ENTER == HIGH){
delay(200);
// Esegue operazione programmata nel Loop 22 - case:10 - "Sub Menù" 2-2
}
}
void loop23() { // funzione loop 23: - case:11 - "sub Menù" 3-2
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Secondo Piano ");
lcd.setCursor(0, 1);
lcd.print("<:DN ENT: UP:>");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(12);delay(200);} // se viene premuto "SU" va allo stato loop 24: - case:12 - "sub Menù" 4-2
if (GIU == HIGH){setStato(10);delay(200);} // se viene premuto "GIU"" torna allo stato loop 22: - case:10 - "sub Menù" 2-2
if (ENTER == HIGH){
delay(200);
// Esegue operazione programmata nel Loop 23 - case:11 - "Sub Menù" 3-2
}
}
void loop24() { // funzione loop 24: - case:12 - "sub Menù" 4-2
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Temp. Esterna ");
lcd.setCursor(0, 1);
lcd.print("<:DN ENT: ");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(9);delay(200);} // se viene premuto "SU" va allo stato loop 21: - case:9 - "sub Menù" 1-2
if (GIU == HIGH){setStato(11);delay(200);} // se viene premuto "GIU"" torna allo stato loop 23: - case:11 - "sub Menù" 3-2
if (ENTER == HIGH){
delay(200);
// Esegue operazione programmata nel Loop 24 - case:12 - "Sub Menù" 4-2
}
}
void loop30() { // funzione loop 30: - case:13 "Menu Base 3" 3-0
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Attivazione ");
lcd.setCursor(0, 1);
lcd.print("Uscite digitali ");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(1);delay(200);} // se viene premuto "SU" va allo stato 10 - Case: 1 "Menu Base 1" 1-0
if (GIU == HIGH){setStato(8);delay(200);} // se viene premuto "GIU" torna allo stato 20 - Case: 8 "Menu Base 2" 2-0
if (ENTER == HIGH){setStato(14);delay(200);} // se viene premuto "ENTER" va allo stato 31 - Case: 14 - "sub Menù" 1-3
}
void loop31() { // funzione loop 31: - case:14 - "sub Menù" 1-3
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Sub Menu 1-3 ");
lcd.setCursor(0, 1);
lcd.print("<:DN ENT: UP:>");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(15);delay(200);} // se viene premuto "SU" va allo stato loop 32: - case:15 - "sub Menù" 2-3
if (GIU == HIGH){setStato(13);delay(200);} // se viene premuto "GIU"" torna allo stato loop 30: - case:13 - "Menu Base 3" 3-0
if (ENTER == HIGH){
delay(200);
// Esegue operazione programmata nel Loop 31 - case:14 - "Sub Menù" 1-3
}
}
void loop32() { // funzione loop 32: - case:15 - "sub Menù" 2-3
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Sub Menu 2-3 ");
lcd.setCursor(0, 1);
lcd.print("<:DN ENT: UP:>");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(16);delay(200);} // se viene premuto "SU" va allo stato loop 32: - case:16 - "sub Menù" 3-3
if (GIU == HIGH){setStato(14);delay(200);} // se viene premuto "GIU"" torna allo stato loop 30: - case:14 - "sub Menù" 1-3
if (ENTER == HIGH){
delay(200);
// Esegue operazione programmata nel Loop 32 - case:15 - "Sub Menù" 2-3
}
}
void loop33() { // funzione loop 33: - case:16 - "sub Menù" 3-3
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Sub Menu 3-3 ");
lcd.setCursor(0, 1);
lcd.print("<:DN ENT: UP:>");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(17);delay(200);} // se viene premuto "SU" va allo stato loop 33: - case:17 - "sub Menù" 4-3
if (GIU == HIGH){setStato(15);delay(200);} // se viene premuto "GIU"" torna allo stato loop 30: - case:15 - "sub Menù" 2-3
if (ENTER == HIGH){
delay(200);
// Esegue operazione programmata nel Loop 33 - case:16 - "Sub Menù" 3-3
}
}
void loop34() { // funzione loop 34: - case:17 - "sub Menù" 4-3
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Sub Menu 4-3 ");
lcd.setCursor(0, 1);
lcd.print("<:DN ENT: UP:>");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(18);delay(200);} // se viene premuto "SU" va allo stato loop 35: - case:18 - "sub Menù" 5-3
if (GIU == HIGH){setStato(16);delay(200);} // se viene premuto "GIU"" torna allo stato loop 33: - case:16 - "sub Menù" 3-3
if (ENTER == HIGH){
delay(200);
// Esegue operazione programmata nel Loop 34 - case:17 - "Sub Menù" 4-3
}
}
void loop35() { // funzione loop 35: - case:18 - "sub Menù" 5-3
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Sub Menu 5-3 ");
lcd.setCursor(0, 1);
lcd.print("<:DN ENT: UP:>");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(19);delay(200);} // se viene premuto "SU" va allo stato loop 36: - case:19 - "sub Menù" 6-3
if (GIU == HIGH){setStato(17);delay(200);} // se viene premuto "GIU"" torna allo stato loop 34: - case:17 - "sub Menù" 4-3
if (ENTER == HIGH){
delay(200);
// Esegue operazione programmata nel Loop 35 - case:18 - "Sub Menù" 5-3
}
}
void loop36() { // funzione loop 36: - case:19 - "sub Menù" 6-3
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Sub Menu 6-3 ");
lcd.setCursor(0, 1);
lcd.print("<:DN ENT: UP:>");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(20);delay(200);} // se viene premuto "SU" va allo stato loop 37: - case:20 - "sub Menù" 7-3
if (GIU == HIGH){setStato(18);delay(200);} // se viene premuto "GIU"" torna allo stato loop 35: - case:18 - "sub Menù" 5-3
if (ENTER == HIGH){
delay(200);
// Esegue operazione programmata nel Loop 36 - case:19 - "Sub Menù" 6-3
}
}
void loop37() { // funzione loop 37: - case:20 - "sub Menù" 7-3
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Sub Menu 7-3 ");
lcd.setCursor(0, 1);
lcd.print("<:DN ENT: ");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(14);delay(200);} // se viene premuto "SU" va allo stato loop 31: - case:14 - "sub Menù" 1-3
if (GIU == HIGH){setStato(19);delay(200);} // se viene premuto "GIU"" torna allo stato loop 36: - case:19 - "sub Menù" 6-3
if (ENTER == HIGH){
delay(200);
// Esegue operazione programmata nel Loop 37 - case:20 - "Sub Menù" 7-3
}
}
void loop1() { // funzione loop1: - case: 21 - "Data/Ora"
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
DateTime now = rtc.now(); // Variabile su cui viene copiata la data/ora attuale dall' RTC
char buffer[10]; // variabile "buffer" su cui viene passato il dato intero formattato di data e ora
sprintf(buffer,"%02d/%02d/%d",now.day(),now.month(),now.year()); // Formatta la data nel formato "Giorno/Mese/Anno"
lcd.setCursor(0,0); // Imposta il cursore all'inizio della prima riga
lcd.print( buffer ); // Stampa la data
sprintf(buffer,"%02d:%02d:%02d",now.hour(),now.minute(),now.second()); // Formatta l'ora nel formato "Ore: Minuti: Secondi"
lcd.setCursor(0,1); // Imposta il cursore all'inizio della seconda rig
lcd.print( buffer ); // Stampa l'ora'
delay(200); // aggiorna la scritta ora e data sul display ogni 200mS
}
if (SU == HIGH){setStato(22);delay(200);} // se viene premuto "SU" va allo stato loop22 - case:22 - "Temp. P.Terra"
if (GIU == HIGH){setStato(0);delay(200);} // se viene premuto "GIU"" torna allo stato loop 0: - case:0 - "Schermata principale"
if (ENTER == HIGH){setStato(1);delay(200);}
}
void loop2() { // funzione loop2 - case: 22 - "Temp P.Terra"
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Temp. P.Terra ");
lcd.setCursor(0, 1);
lcd.print("<:DN ENT: UP:>");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(23);delay(200);} // se viene premuto "SU" va allo stato loop 3: - case:23 - "Temp. P.Primo"
if (GIU == HIGH){setStato(21);delay(200);lcd.clear();} // se viene premuto "GIU"" torna allo stato loop 1: - case:21 - "Data/Ora"
if (ENTER == HIGH){setStato(1);delay(200);}
}
void loop3() { // funzione loop3 - case: 23 - "Temp P.Primo"
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Temp. P.Primo ");
lcd.setCursor(0, 1);
lcd.print("<:DN ENT: UP:>");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(24);delay(200);} // se viene premuto "SU" va allo stato loop 4: - case:24 - "Temp. P.Secondo"
if (GIU == HIGH){setStato(22);delay(200);} // se viene premuto "GIU"" torna allo stato loop 2: - case:22 - "Temp. P.Terra"
if (ENTER == HIGH){setStato(1);delay(200);}
}
void loop4() { // funzione loop4 - case: 24 - "Temp Esterna"
if (FIRST) { // permette di procedere con la prossima scrittura solo se la variabile FIRST è "true"
lcd.setCursor(0, 0);
lcd.print(" Temp. Esterna ");
lcd.setCursor(0, 1);
lcd.print("<:DN ENT: UP:>");
FIRST = false; // dopo aver scritto una volta su LCD riporta la variabile a "false"
}
if (SU == HIGH){setStato(21);delay(200);lcd.clear();} // se viene premuto "SU" va allo stato loop 1: - case:21 - "Data/Ora"
if (GIU == HIGH){setStato(23);delay(200);} // se viene premuto "GIU"" torna allo stato loop 3: - case:23 - "Temp. P.Secondo"
if (ENTER == HIGH){setStato(1);delay(200);}
}