Go Down

Topic: LCD menù con 5 pulsanti (Read 1 time) previous topic - next topic

Travis9011

Salve a tutti ragazzi. Vorrei costruire un menù su lcd con 5 pulsanti(Enter,back,Su,Giù,Opzioni).
Praticamente un piccolo menù l'ho realizzato tramite switchcase e funziona, solo che vorrei avere per ogni voce, dei sottomenù da richiamare con il pulsante opzioni. Ho provato in vari modi, anche concatenando gli switch, ma nulla da fare, al massimo riesco a vedere i sottomenù, ma con lcd che lampeggia le scritte.
Vi posto lo sketch con il menù lineare senza sottomenu:

Code: [Select]
#include <LiquidCrystal.h>  //Libreria per LCD

#define ENTER  11            //Pin a cui e' collegato il tasto Enter
#define ESC  10             //Pin a cui e' collegato il tasto Esc
#define BACKLIGHT  9             
#define MENO 8            //Pin a cui e' collegato il tasto Meno
#define OPTION 1
#define PIU  0          //Pin a cui e' collegato il tasto Piu


unsigned int principale = 0;
boolean piu = LOW, meno = LOW, enter, esc, option;//Variabili associate ai quattro pulsanti nella modalita' scorrimento pagine

boolean set = LOW;//Entra nella modalita' settaggio

long tempo_btn = 0, debounce = 190;  //Tempo tra due letture successive di un bottone (300 ms)
long tempo_scroll = 0;

//Display LCD
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

void setup()
{
  lcd.begin(8, 2);

  pinMode(ENTER, INPUT);
  pinMode(ESC, INPUT);
  pinMode(PIU, INPUT);
  pinMode(MENO, INPUT);
  pinMode(OPTION, INPUT);

  pinMode(BACKLIGHT, OUTPUT);
 
  digitalWrite(BACKLIGHT, HIGH);
 
}

void loop(){

//LETTURA PULSANTI
if(set == LOW)
  {
    piu = digitalRead(PIU);
    meno = digitalRead(MENO);
  }
  enter = digitalRead(ENTER);
  esc = digitalRead(ESC);
  option = digitalRead(OPTION);


  //Se premo PIU incremento di uno il contatore pagine
  if(piu == HIGH && millis() - tempo_btn > debounce && principale >= 0 && principale < 4)
  {
    tempo_btn = millis();
    principale++;
    if(principale == 3)
      principale = 0;
  }

  //Se premo MENO decremento il contatore pagine
  if(meno == HIGH && millis() - tempo_btn > debounce && principale > 0 && principale < 4)
  {
    tempo_btn = millis();
    principale--;

}

  //Se premo ESC torno alla schermata Home uscendo anche da tutti i sottomenu
  if(esc == HIGH && millis() - tempo_btn > debounce)  //Quando premo "esc" torno alla schermata HOME
  {
    tempo_btn = millis();
    principale = 0;
    set = LOW;
  }
 
  switch (principale)
  {
  case 0:    //Schermata HOME

    // codice per pagina nr. 0 (HOME)
    lcd.setCursor(0,0);
    lcd.print("Primo         ");
    lcd.setCursor(0,1);
    lcd.print("               ");

if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
     
      tempo_btn = millis();
      set = !set;
    }
   
     
   
     
    if(set == HIGH)
    {
     
      lcd.setCursor(0,0);
      lcd.print(" Play            ");
      lcd.setCursor(0,1);
      lcd.print(" Primo            ");
      delay(500);
    }
   
    break;
   
    case 1:
   
    lcd.setCursor(0,0);
    lcd.print("Secondo       ");
    lcd.setCursor(0,1);
    lcd.print("              ");
   
    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }
   
    if(set == HIGH)
    {
      lcd.setCursor(0,0);
      lcd.print("Play            ");
      lcd.setCursor(0,1);
      lcd.print("Secondo         ");
    }
   
   
  break;
 
  case 2:
 
    lcd.setCursor(0,0);
    lcd.print("Terzo              ");
    lcd.setCursor(0,1);
    lcd.print("                   ");
   
    if(enter == HIGH && millis() - tempo_btn > debounce)  //Premendo "enter" si entra nella sotto-modalita'
    {
      tempo_btn = millis();
      set = !set;
    }
   
   
  if(set == HIGH)
    {
      lcd.setCursor(0,0);
      lcd.print(" Play            ");
      lcd.setCursor(0,1);
      lcd.print(" Terzo            ");
      delay(500);
    }
   
    break;
   
  }}
 


Come detto, qualcuno ha realizzato un menù con sottomenù? Oppure riesce ad aiutarmi nell'implementare i sottomenù in questo?
Grazie!

Go Up