Ciao a tutti
Purtroppo, qualche volta ancora mi incarto con i menu... Ho un menu con delle impostazioni che faccio tranquillamente in un loop ristretto, tanto poi se i parametri sono cambiati bisogna comunque azzerare e ripartire con i conteggi. Il problema è che non so come uscire fuori dal menu una volta che ho fatto le impostazioni: se entro in tic_on_off, per esempio, finito l'impostazione, premendo il pulsante dell'encoder la confermo e dovrei tornare al loop... Purtroppo mi sembra proprio di non potermela cavare con un return... Mi potete aiutare?
Grazie
Gianluca
#define PREMUTO (!(PINC&0b00000001))
#define NONPREMUTO (PINC&0b00000001)
void loop()
{
// Serial.print("cont_max= "); Serial.print(cont_max); Serial.print(" cont="); Serial.println(cont);
if PREMUTO {menu();} // Se il pulsante è premuto, salta al menu.
...
}
void menu()
{
if(bip_on) bip();
print_menu();
while PREMUTO; // Attende che venga lasciato il pulsante.
while NONPREMUTO
{
encoder();
if((E==1 && cod_menu<4) || (E==-1 && cod_menu>1))
{
cod_menu+=E; // E=0 sta in encoder().
print_menu();
}
} // END NONPREMUTO: viene premuto il pulsante.
switch_menu(); // Salta all'impostazione tramite uno switch/case, poi ritorna
// qui e dovrebbe tornare al loop, invece resta nel menu.
}
void print_menu()
{
lcd.clear(); lcd.print(" Menu ");
lcd.setCursor(0,1);
switch(cod_menu)
{
case 1: lcd.print (F("1 T. d'integraz."));
break;
case 2: lcd.print (F("2 Tic On/Off "));
break;
case 3: lcd.print (F("3 Bip On/Off "));
break;
case 4: lcd.print (F("4 Test On/Off "));
break;
}
}
void switch_menu()
{
switch(cod_menu) // Chiama la funzione di impostazione.
{
case 1: t_integr(); // Stato in EEPROM(1)
break;
case 2: tic_on_off(); // Stato in EEPROM(2)
break;
case 3: bip_on_off(); // Stato in EEPROM(3)
break;
case 4: test_on_off();// Stato in EEPROM(4)
break;
}
}
void tic_on_off()
{
lcd.clear(); lcd.setCursor(6, 0); lcd.print("Tic");
while PREMUTO; // Attende che venga lasciato il pulsante
while NONPREMUTO // Continua a leggere l'encoder finché non premo
{
encoder();
if(tic_on==0 && E==1) {tic_on=1;}
else if(tic_on==1 && E==-1) {tic_on=0;}
else noTone(7);
lcd.setCursor(6, 1);
if(tic_on) lcd.print("On "); else lcd.print("Off");
}
EEPROM.update(2, tic_on); // EEPROM.update scrive solo se il valore è diverso da quello corrente.
}