/*
Questo sketch imposta un menù "Presentazione" principale che permette la scelata di altri 3 menù.
premendo "SET" visualizza il primo menù di impostazione "Impostazione"/"Data e Ora"
premendo "SU" visualizza il secondo menù di selezione "Monitor"/"Ingressi Analog."
premendo "SU" visualizza il terzo menù di selezione "Impostazione"/"Uscite Digitali"
premendo "SU" torna al primo menu ciclicamente.
premendo "GIU" procede il ciclo dei menù al contrario
premendo "SET" su uno qualunque dei tre menù si entra nel menù stesso e nelle sue impostazioni
***
menu "Impostazione"/"Data e Ora"
se premo sempre "SET" visualizzo in sequenza; "Giorno"/"Mese"/"Anno"/"Ore"/"Minuti"/"Secondi"
per impostare un parametro desiderato aumentare o diminuire con "SU"o"GIU"-
per tornare all'inizio del menù "Impostazione"/"Data e Ora" basta non premere nessun tasto per 4 secondi
***
menù "Monitor"/"Ingressi Analog."
se premo "SU" visualizzo "Monitor"/"Ingressi Analog." "SET" per entrare
premendo "SU" visualizzo " Ingr. Analog A0 "/" Valore in Volts"
premendo "SU" visualizzo " Ingr. Analog A1 "/" Valore in Volts"
premendo "SU" visualizzo " Ingr. Analog A2 "/" Valore in Volts"
premendo "SU" torno a: Monitor"/"Ingressi Analog.", oppure torno indietro con "GIU"
***
menù "Impostazione"/"Uscite Digitali"
premendo "SU" visualizzo "Imposta usc. LED"/"Azzurro" e poi compare "ON" o "OFF",
se premo "SET" l'uscita si attiva/disattiva
premendo "SU" visualizzo passo all'uscita sucessiva e così via tornando a Impostazione"/"Uscite Digitali"
premendo "GIU" procedo in senso contrario
non premendo tasti per 4 secondi torna al menù "Presentazione" principale
*/
#include <LiquidCrystal.h> // Dichiara la "Libreria" che il display LCD
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // Pin digitali dedicati al display LCD
const int ENTER = 8; // Dichiara la Variabile "ENTER" allo stato logico del Pin 8
const int SU = 9; // Dichiara la Variabile "SU" allo stato logico del Pin 9
const int GIU = 10; // Dichiara la Variabile "GIU" allo stato logico del Pin 10
const int ESC = 11; // Dichiara la Variabile "ESC" allo stato logico del Pin 11
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 ledAzzurroPin = 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 ledGialloPin = 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 ledArancioPin = 28; // Dichiara la Variabile "ledArancioPin" allo stato logico del Pin 28
int stato = 0;
int SelMenu = 0; // contatore dei livelli per selezionare i vari menù
int setUsciteLed = 0; // contatore dei livelli per ativare/disattivare e monitorare su LCD le uscite digitali
int setDataOra= 0; // contatore dei livelli per monitorare su LCD gli ingressi digitali
int selAnalog = 0; // contatore dei livelli per monitorare su LCD gli ingressi analogici
void setup() {
pinMode(ENTER , INPUT); // inizializza pin legato alla variabile "ENTER" come ingresso digitale
pinMode(SU , INPUT); // inizializza pin legato alla variabile "SU" come ingresso digitale
pinMode(GIU , INPUT); // inizializza pin legato alla variabile "GIU" come ingresso digitale
pinMode(ESC , INPUT); // inizializza pin legato alla variabile "ESC" come ingresso digitale
pinMode(ledAzzurroPin, 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(ledGialloPin, 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(ledArancioPin, OUTPUT); // inizializza pin legato alla variabile "ledArancioPin" come uscita digitale
Serial.begin(9600); // Inizializza la stampa su schermo a 9600 baud rate
lcd.begin(16, 2); // definisce il tipo di display LCD, 2 righe, 16 caratteri
}
void loop() {
Serial.print(" SelMenu ");
Serial.print(SelMenu);
Serial.print(" stato ");
Serial.print(stato);
Serial.print(" ESC ");
Serial.print(digitalRead(ESC));
Serial.print(" GIU ");
Serial.print(digitalRead(GIU));
Serial.print(" SU ");
Serial.print(digitalRead(SU));
Serial.print(" ENTER ");
Serial.println(digitalRead(ENTER));
// i pulsanti SU e GIU incrementano/decrementano la variabile "Stato" che muove la prima serie di menù
if (SelMenu == 0) { // Se il menu principale non è attivo
if (digitalRead(ENTER) == HIGH) { // se viene premuto il pulsante su
delay(200);
SelMenu = 1; // Attiva la selezione menù "SelMenu"
stato = 1; // Reimposta lo stato del menu principale a 0 quando viene attivato SelMenu
setUsciteLed = 0; // Reimposta lo stato del menu Uscite digitali a 0 quando viene attivato SelMenu
setDataOra= 0; // Reimposta lo stato del menu Impostazione Data/Ora a 0 quando viene attivato SelMenu
selAnalog = 0; // Reimposta lo stato del menu Ingressi analogici a 0 quando viene attivato SelMenu
if (SelMenu == 1) {
if (stato >= 1 && stato <= 3) {
if (digitalRead(ENTER) == HIGH) { // se viene premuto il pulsante su
stato = 10;
}
}
}
else {
if (digitalRead(SU) == HIGH) { // se viene premuto il pulsante su
delay(200);
if (stato < 14) {
stato++; // incrementa la variabile "stato" di 1 sino a raggiungere il massimo di 4
}
}
}
}
}
else {
if (digitalRead(SU) == HIGH) { // se viene premuto il pulsante su
delay(200);
if (stato < 3) {
stato++; // incrementa la variabile "stato" di 1 sino a raggiungere il massimo di 4
}
}
if (digitalRead(GIU) == HIGH) { // se viene premuto il pulsante giu
delay(200);
if (stato > 1) {
stato--; // decrementa la variabile "stato" sino a raggiungere il minimo di 1
}
}
if (digitalRead(ESC) == HIGH) {
delay(200); // se viene premuto il pulsante su
SelMenu = 0; // Attiva la selezione menù "SelMenu"
stato = 0; // Reimposta lo stato del menu principale a 0 quando viene attivato SelMenu
setUsciteLed = 0; // Reimposta lo stato del menu Uscite digitali a 0 quando viene attivato SelMenu
setDataOra= 0; // Reimposta lo stato del menu Impostazione Data/Ora a 0 quando viene attivato SelMenu
selAnalog = 0; // Reimposta lo stato del menu Ingressi analogici a 0 quando viene attivato SelMenu
}
}
switch(stato) { // menù di selezione
case 0: // livello - selezione 0
lcd.setCursor(0, 0);
lcd.print(" Pagina "); // scrive "Impostazione" sulla seconda riga del display LCD
lcd.setCursor(0, 1);
lcd.print(" principale "); // scrive "1-0" sulla seconda riga del display LCD
break;
case 1: // livello - selezione 1
lcd.setCursor(0, 0);
lcd.print(" Impostazione "); // scrive "Impostazione" sulla seconda riga del display LCD
lcd.setCursor(0, 1);
lcd.print(" 1-1 "); // scrive "1-1" sulla seconda riga del display LCD
break;
case 2: // livello - selezione 2
lcd.setCursor(0, 0);
lcd.print(" Impostazione "); // scrive "Monitor" sulla seconda riga del display LCD
lcd.setCursor(0, 1);
lcd.print(" 1-2 "); // scrive "1-2" sulla seconda riga del display LCD
break;
case 3: // livello - selezione 3
lcd.setCursor(0, 0);
lcd.print(" Impostazione "); // scrive "Impostazione" sulla seconda riga del display LCD
lcd.setCursor(0, 1);
lcd.print(" 1-3 "); // scrive "1-3" sulla seconda riga del display LCD
break;
case 10: // livello - lezione 10
lcd.setCursor(0, 0);
lcd.print(" Presentazione "); // scrive "Presentazione" sulla seconda riga del display LCD
lcd.setCursor(0, 1);
lcd.print(" 2-1 "); // scrive "2-0" sulla seconda riga del display LCD
break;
case 11: // livello - selezione 11
lcd.setCursor(0, 0);
lcd.print(" Presentazione "); // scrive "Presentazione" sulla seconda riga del display LCD
lcd.setCursor(0, 1);
lcd.print(" 2-1 "); // scrive "2-1" sulla seconda riga del display LCD
break;
case 12: //livello - selezione 12
lcd.setCursor(0, 0);
lcd.print(" Presentazione "); // scrive "Presentazione" sulla seconda riga del display LCD
lcd.setCursor(0, 1);
lcd.print(" 2-2 "); // scrive "2-2" sulla seconda riga del display LCD
break;
case 13: //livello - selezione 13
lcd.setCursor(0, 0);
lcd.print(" Presentazione "); // scrive "Presentazione" sulla seconda riga del display LCD
lcd.setCursor(0, 1);
lcd.print(" 2-3 "); // scrive 2-3 sulla seconda riga del display LCD
break;
case 14: //livello - selezione 14
lcd.setCursor(0, 0);
lcd.print(" Presentazione "); // scrive "Presentazione" sulla seconda riga del display LCD
lcd.setCursor(0, 1);
lcd.print(" 2-4 "); // scrive "2-4" sulla seconda riga del display LCD
break;
}
}