Hallo, ich habe mir für ein Schulprojekt ein kleines Menü auf dem Arduino Uno angelegt durch das ich mit zwei Tastern hoch und runter steuern kann. Mit einem dritten Taster, wähle ich dann die entsprechenden Menü Punkte aus. Das Ganze wird auf einem 16x2 LCD Display mit I2C Backpack angezeigt.
Im Moment ist es noch so, dass man 5 Sekunden in dem Menüpunkt steht und dann automatisch wieder ins Ausgangsmenü kommt.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int upButton = 10;
int downButton = 11;
int selectButton = 12;
int menu = 1;
void setup() {
lcd.begin();
lcd.backlight();
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(selectButton, INPUT_PULLUP);
updateMenu();
}
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)){
executeAction();
updateMenu();
delay(100);
while (!digitalRead(selectButton));
}
input_val = analogRead(LDR);
}
void updateMenu() {
switch (menu) {
case 0:
menu = 1;
break;
case 1:
lcd.clear();
lcd.print(">Menu1");
lcd.setCursor(0, 1);
lcd.print(" Menu2");
break;
case 2:
lcd.clear();
lcd.print(" Menu1");
lcd.setCursor(0, 1);
lcd.print(">Menu2");
break;
case 3:
lcd.clear();
lcd.print(">Menu3");
lcd.setCursor(0, 1);
lcd.print(" Menu4");
break;
case 4:
lcd.clear();
lcd.print(" Menu3");
lcd.setCursor(0, 1);
lcd.print(">Menu4");
break;
case 5:
menu = 4;
break;
}
}
void executeAction() {
switch (menu) {
case 1:
action1();
break;
case 2:
action2();
break;
case 3:
action3();
break;
case 4:
action4();
break;
}
}
void action1() {
lcd.clear();
lcd.print("Menu1:");
delay(5000);
}
void action2() {
lcd.clear();
lcd.print("Menu2:");
delay(5000);
}
void action3() {
lcd.clear();
lcd.print("Menu3:");
delay(5000);
}
void action4() {
lcd.clear();
lcd.print("Menu4:");
delay(5000);
}
Nun möchte ich es aber so haben das man erst wieder zurück kommt, nachdem man den "Select" Taster erneut betätigt. Habe schon ein bisschen was mit While-Schleifen ausprobiert, was bis jetzt aber noch nicht so richtig funktionieren wollte.
Kann mir da eventuell jemand behilflich sein?