• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Obsługa i wyświetlanie prostego MENU na LCD
#1
Dzień Dobry,

posiadam pewien kod który dostępny był w internecie, chodzi o proste i intuicyjne menu, gdzie posiadam dwie opcje do wyboru. Steruje góra dół za pomocą dwóch przycisków a trzeci przycisk służy jako "enter". Menu zostało napisane za pomocą switch (zmienna) case :

Nie umiem sobie poradzić z "akcją" która będzie się działa po wyborze jednej z dwóch opcji. 
W funkcji void action1() chcę abym na LCD widział moje interkacje z programem, tzn w innej częsci kod, program zlicza 
"ilość przejazdów" (kliknięcie w przycisk) aż do 5, za 5-tym kliknieciem urchomiony zostaje przekaznik a za 6-tym znowu wracamy do punktu wyjscia czyli 1. i znowu klikam 1-2-3-4-5>przekaznik.

To działanie ma trwać aż do momentu kiedy wcisnę przycisk czwarty: ESC. który wróci do menu.

Nie potrafię napisać kodu który po wejsciu w dany tryb dostępny w menu, będzie w niej tak długo aż wcisnę klawisz ESC(czwarty przycisk). W funkcji action coś tam napisałem, w miarę to działa ale na wyświetlaczu lcd widzę migotające napisy.. interakcja działa (tzn widzę jak zliczają się impulsy ale całość migota na lcd), nie wiem gdzie w tym kodzie umiejscowić funkcje wyświetlanie();. Aby na LCD nie migotała cała ta funkcja.

Byłbym wdzięczny za każdą pomoc. Tworzę projekt który w krótce chciałbym tu przedstawić.
Pozdrawiam


Cały kod poniżej:
Kod:
/////////////////////////////////////////////////////////////////////////
void loop()
  { 
    if(!digitalRead(downButton))
      {
        menu++;
        updateMenu();
        delay(100);
        while(!digitalRead(downButton));
      }
    if(!digitalRead(upButton))
      {
        menu--;
        updateMenu();
        delay(100);
        while(!digitalRead(upButton));
      }
    if(!digitalRead(selectButton))
      {
        selectAction();
        updateMenu();
        delay(100);
        while(!digitalRead(selectButton));
      }
  }
/////////////////////////////////////////////////////////////////////////
void updateMenu()
  {
      switch(menu)
        {
          case 0:
          menu = 1;
          break;

          case 1:
          lcd.clear();
          lcd.print(">Automat");
          lcd.setCursor(0,1);
          lcd.print(" Recznie");
          break;

          case 2:
          lcd.clear();
          lcd.print(" Automat");
          lcd.setCursor(0,1);
          lcd.print(">Recznie");
          break;

          case 3:
          menu = 2;
          break;
        }
  }
/////////////////////////////////////////////////////////////////////////
void selectAction()
  {
    switch(menu)
    {
      case 1:       
      action1();           
      break;
   
      case 2:
      action2();
      break;
    }   
  }
/////////////////////////////////////////////////////////////////////////
void action1()
  {           
    przejazdy = 1;
    if(digitalRead(backButton) == HIGH)
      {
       
        while((digitalRead(backButton)== HIGH))
        {
          sygnalizacja();
         
     
          if(przejazdy == wybrana_ilosc)
              {
                digitalWrite(przekaznik1,LOW);
              } 
          else if(przejazdy == wybrana_ilosc + 1)
              {
                przejazdy = 1;
              }
          else if(przejazdy <= 0)
              {
                przejazdy = 1;
              }
          else
              {
                digitalWrite(przekaznik1,HIGH);
              }       
              wyswietlanie();
        }
        while(digitalRead(backButton)== HIGH);             
      } 
  }

void wyswietlanie()
  {
    lcd.clear();
    lcd.setCursor(0, 0); //Ustawienie kursora
    lcd.print("Przejazd: "); //Wyświetlenie tekstu
    lcd.setCursor(10, 0); //Ustawienie kursora
    lcd.print(przejazdy); //Wyświetlenie tekstu
    lcd.setCursor(0, 1); //Ustawienie kursora
    lcd.print("Rytm: "); //Wyświetlenie tekstu
    lcd.setCursor(10, 1); //Ustawienie kursora
    lcd.print(wybrana_ilosc); //Wyświetlenie tekstu
  }
 
Odpowiedź
  


Wiadomości w tym wątku
Obsługa i wyświetlanie prostego MENU na LCD - przez dyjokovsky - 12-02-2023, 20:24

Skocz do:


Przeglądający: 1 gości