12-02-2023, 20:24
(Ten post był ostatnio modyfikowany: 12-02-2023, 21:17 przez dyjokovsky.)
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:
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
}