Il codice per ora è parecchio incasinato..ma ve lo mostro...
sto cercando di costruire la struttura da zero, usando i vettori
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MenuBackend.h>
#include <Keypad.h>
/*
* 0 = Menù principale
* 1 = Menù Setup
* 2 = Menù Leggi sensori
* 3 = Menù Avvia
*/
/*
* setup | selezione sensori | set time | set umidità minima | set umidità max
* leggi sensori |
* avvia irrigazione |
* stop |
*/
int menuLivello;
// righe e colonne del pad
const byte ROWS = 4;
const byte COLS = 4;
// massima profondità dei menù
int menuCorrente;// menù principale
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
// definisci il menù con le sue sottosezioni
// primo numero: menù radice
// secondo numero: posizione del menù a cui è riferita la sottosezione
char* menu[2][6] = {
{"0","0","Setup","Leggi sensori","Attiva Irrigazione","Stop" },
{"0","2","Selezione sensori","Set time","Set umidità min","Set umidità max" },
};
//i Pin a cui sono connesse le righe del KeyPad
byte rowPins[ROWS] = {2,3,4,5};
// i Pin a cui sono connesse le colonne del KeyPad
byte colPins[COLS] = {6,7,8,9};
LiquidCrystal_I2C lcd(0x27, 20, 4);
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//-----------------------------------------------------------------
// setup()
//-----------------------------------------------------------------
void setup() {
// avvia monitor seriale per il debug
Serial.begin(9600);
// Setup LCD
lcd.init();
lcd.backlight();
lcd.clear();
// mostra il primo menù
menuCorrente = 0;
menuLivello = 0;
}
//-----------------------------------------------------------------
// loop
//-----------------------------------------------------------------
void loop() {
mostraMenu(menuCorrente);
}
//-----------------------------------------------------------------
// mostraMenu()
//-----------------------------------------------------------------
void mostraMenu(int livelloMenu){
// mostra gli elementi del menù mostrandone uno per riga
int colonnaMenu;
int posizione = 0;
for(int cont=0; cont<=4; cont++){
colonnaMenu = cont+2;
lcd.setCursor(1,cont);
lcd.print(menu[livelloMenu][colonnaMenu]);
}
mostraSelettore(posizione);
}
//-----------------------------------------------------------------
// mostraSelettore()
//-----------------------------------------------------------------
void mostraSelettore(int colonna){
int posizioneSelettore;
int x;
// il selettore sarà visualizzato nella riga del menù corrente
posizioneSelettore = colonna;
lcd.setCursor(0,posizioneSelettore);
lcd.print(">");
//debug();
// loop infinito
while(x>=0){
// legge il tasto premuto sul keypad
char key = keypad.getKey();
if (key=='A'){ //------------------------- UP
lcd.setCursor(0,colonna);
lcd.print(" ");
colonna--;
lcd.setCursor(0,colonna);
lcd.print(">");
menuCorrente = colonna;
}
else if (key=='B'){ //------------------------- DOWN
lcd.setCursor(0,colonna);
lcd.print(" ");
colonna++;
lcd.setCursor(0,colonna);
lcd.print(">");
menuCorrente = colonna;
}
else if (key=='*'){ //------------------------- BACK
}
else if (key=='#'){ //------------------------- ENTER
Serial.print("menuCorrente: ");
Serial.println(menu[colonna+2][1]);
Serial.print("colonna: ");
Serial.println(colonna);
if (menu[menuCorrente][1] == colonna+2){
lcd.clear();
}
}
//Serial.print(menuCorrente);
}
}