Hallo zusammen,
Ich bin dabei eine Display-Menü zu erstellen. Nachdem ich GeGoogelt und viele Beispiele ausprobiert habe, konnte ich etwas finden und zurecht bauen, das ich für den Start verwenden kann.
Die Idee ist, dass ich den Wert von 2, 3 , 4 usw. Zählern und 2, 3, 4 usw.Timern über den Bildschirm mit schlalter verändern kann.
Wie der Code gerade ist, ist es möglich, Individuell der Werte zu ändern. + oder - 1000 Zyklen und + oder - 1000 Millisekunden.
unsigned long parameters[numOfScreens] = {1000};
Aber was ich gerne hätte, wäre eine individuelle Wertänderung für den die Zähler, und dass ich eine Option wählen könnte, wo es 10, 100, 1000 oder 10000 Schritte zum Erhöhen oder Verringern der Zähler hätte. Ich habe bereits versucht, es zum laufen zu bringen, aber ich habe schon mein Limit der Coding Kentnisse erreichet. Ich wäre dankbar für etwas Hilfe. Natürlich, wenn es einen besseren Weg gibt als den, den ich jetzt mit meinem Code gehe, wäre ich auch für einige Vorschläge dankbar.
Folgt der Code, den ich bis jetzt habe.
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//Input & Button Logic
const int numOfInputs = 3;
const int inputPins[numOfInputs] = {6,7,8};
int inputState[numOfInputs];
int lastInputState[numOfInputs] = {LOW,LOW,LOW};
bool inputFlags[numOfInputs] = {LOW,LOW,LOW};
long lastDebounceTime[numOfInputs] = {0,0,0};
long debounceDelay = 5;
/////////////////////////////////////////////////////
//LCD Menu Logic
const int numOfScreens = 4;
int currentScreen = 0;
String screens[numOfScreens][2] = { {"Counter1", "Cycles"}, {"Counter2", "Cycles"}, {"Timer1","MiliSec."}, {"Timer2","MiliSec."}};
unsigned long parameters[numOfScreens] = {1000};
//////////////////////////////////////////////////////
void setup()
{
for(int i = 0; i < numOfInputs; i++) {
pinMode(inputPins[i], INPUT);
digitalWrite(inputPins[i], HIGH); // pull-up 20k
}
Serial.begin(9600);
lcd.begin(16, 3);
lcd.setCursor(0,0);
lcd.print(":::Menu:::");
lcd.setCursor(5,1);
}
//////////////////////////////////////////////////////
void loop()
{
setInputFlags();
resolveInputFlags();
}
//////////////////////////////////////////////////////
void setInputFlags()
{
for(int i = 0; i < numOfInputs; i++) {
int reading = digitalRead(inputPins[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 resolveInputFlags()
{
for(int i = 0; i < numOfInputs; i++) {
if(inputFlags[i] == HIGH) {
inputAction(i);
inputFlags[i] = LOW;
printScreen();
}
}
}
///////////////////////////////////////////////////////
void inputAction(int input)
{
if(input == 0) {if (currentScreen == 0) {currentScreen = numOfScreens-1;}
else{currentScreen--;}}
else if(input == 1) {
parameterChange(0);
}else if(input == 2) {
parameterChange(1);
}
}
////////////////////////////////////////////////////////
void parameterChange(int key) {
if(key == 0) {
parameters[currentScreen] = parameters[currentScreen]+500;
}else if(key == 1) {
parameters[currentScreen] = parameters[currentScreen]-500;
}
}
////////////////////////////////////////////////////////
void printScreen() {
lcd.clear();
lcd.print(screens[currentScreen][0]);
lcd.setCursor(0,1);
lcd.print(parameters[currentScreen]);
lcd.print(" ");
lcd.print(screens[currentScreen][1]);
}