Hallo,
ich habe nach einer Anleitung bei Youtube versucht eine Menüführung mit dem LCD Keypad Shield zu realisieren.
http://eeenthusiast.com/arduino-lcd-tutorial-display-menu-system-scrolling-menu-changeable-variables-projects/
Leider verwendet der Ersteller der Anleitung das Shield nicht sondern normale Buttons.
Jetzt würde ich gerne das Menü über die Buttons des Shields steuern.
Irgendwie weiß ich nicht wie ich die Analogauswertung auf die const int input_Buttons[Number_of_Inputs] schreiben soll. Kann mir jemand helfen?
Danke
#include <Bounce2.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); //Die erforderlichen Pins
int Analogwert = 0;
#define BUTTON_UP 0
#define BUTTON_DOWN 1
#define BUTTON_RIGHT 2
#define BUTTON_LEFT 3
#define BUTTON_SELECT 4
#define NO_BUTTON 5
const unsigned int BAUD_RATE = 9600;
const unsigned int DEBOUNCE_DELAY = 20;
//inputs from LCD Logic
const int Number_of_Inputs = 5;
const int input_Buttons[Number_of_Inputs] = {BUTTON_UP, BUTTON_DOWN, BUTTON_RIGHT, BUTTON_LEFT, BUTTON_SELECT};
int inputState[Number_of_Inputs];
int lastinputState[Number_of_Inputs] = {LOW, LOW, LOW, LOW, LOW};
bool inputFlags[Number_of_Inputs] = {LOW, LOW, LOW, LOW, LOW};
long lastDebounceTime[Number_of_Inputs] = {0, 0, 0, 0, 0};
long debounceDelay = 5;
//LCD Menu Logic
const int number_of_Screens = 5;
int currentScreen = 0;
String screens[number_of_Screens][2] = {{"Main Menu", "Test1" }, {"Menu2", "Test2"}, {"Menu3", "Test3"}, {"Menu4", "Test4"}, {"Menu5", "Test5"}};
int parameters [number_of_Screens];
//String parametersUnits[number_of_Screens]={"Test2","Test2","Test3","Test4","Test5"};
void setup() {
// for(int i = 0; i < Number_of_Inputs; i++) {
// pinMode(input_Buttons[i], INPUT);
// digitalWrite(input_Buttons[i], HIGH); // pull-up 20k }
// }
Serial.begin(BAUD_RATE);
lcd.begin(16, 2);
}
void loop() {
// put your main code here, to run repeatedly:
setInputFlags();
resolveInputFlags();
checkLCD_BUTTONS ();
}
int checkLCD_BUTTONS () {
Analogwert = analogRead(A0);
if (Analogwert > 1000) return NO_BUTTON;
if (Analogwert < 50) return BUTTON_RIGHT;
if (Analogwert < 195) return BUTTON_UP;
if (Analogwert < 380) return BUTTON_DOWN;
if (Analogwert < 555) return BUTTON_LEFT ;
if (Analogwert < 790) return BUTTON_SELECT;
return NO_BUTTON;
}
void resolveInputFlags() {
for (int i = 0; i < Number_of_Inputs; i++) {
if (inputFlags[i] == HIGH) {
inputButtonAction(i);
inputFlags[i] = LOW;
printscreen();
}
}
}
void setInputFlags() {
for (int i = 0; i < Number_of_Inputs; i++) {
int reading = digitalRead(input_Buttons[i]);
if (reading != lastinputState[i]) {
lastDebounceTime[i] = millis();
} if ((millis() - lastDebounceTime[i]) > debounceDelay) {
if (reading != inputState[i]) {
inputState[i] = reading;
if (inputState[i] == HIGH) {
inputFlags[i] = HIGH;
}
}
}
lastinputState[i] = reading;
}
}
void inputButtonAction( int input ) {
if (input == 0) {
if (currentScreen == 0) {
currentScreen = number_of_Screens - 1;
}
else
currentScreen--;
} else if (input == 1 ) {
if (currentScreen == number_of_Screens - 1) {
currentScreen = 0;
} else {
currentScreen ++;
}
} else if (input == 2) {
parameterChange(0);
} else if (input == 3) {
parameterChange(1);
}
}
void parameterChange(int key) {
if (key == 0) {
parameters[currentScreen]++;
} else if (key == 1) {
parameters[currentScreen]--;
}
}
void printscreen() {
lcd.clear();
lcd.print(screens[currentScreen][0]);
lcd.setCursor(0, 1);
lcd.print(parameters[currentScreen]);
lcd.print(" ");
lcd.print(screens[currentScreen][1]);
}