Funktion:
Ich will mit einem Joystick (X) durch ein Menu Scrollen.
Folgendes Problem:
Der Joystick x ist an pin A7 gesteckt aber er nimmt einfach random irgendein wert an und scrollt dementsprechend durch das Menu..
Hatte schonmal das Problem konnte es aber nicht beheben..
Könntet ihr speziell auf die millis im Code achtgeben weil ich glaube es damit was zu tun
1 = Menu seite
und die anderen Werte sollten eigenlich konstant bei ca 550 liegen.
Aber es ändern sich die Werte ohne das ich was anfasse.
42
1
42
1
42
1
42
1
42
1
42
1
42
1
42
1
186
1
186
1
186
1
186
1
186
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 21);
const int PinX = A7; //joystick X
int StateX; // Joystick
int menu = 1; // menu start
unsigned long Vorherige; //millis für zeitverzögerung
unsigned long VorherigeX; //millis für zeitverzögerung
unsigned long VorherigeY; //millis für zeitverzögerung
unsigned long intervall = 500; //millis für zeitverzögerung
unsigned long intervallX = 500; //millis für zeitverzögerung
void setup() {
Serial.begin(9600);
Serial.println("Startet..");
pinMode(PinX, INPUT);
lcd.begin();
updateMenu();
}
void loop() {
unsigned long aktuellY = millis();
Serial.println(StateX);
Serial.println(menu);
if(aktuellY-VorherigeY >= intervallX){ //hier soll jede halbe sekunde der Joystick ausgelesen werden
StateX = analogRead(PinX);
VorherigeY = aktuellY;
}
unsigned long aktuell = millis();
if (aktuell - Vorherige >= intervall) { //hier ebenfalls
if (StateX > 840) { //wenn der joystick ziemlich am anschlag ist
Vorherige = aktuell;
menu++;
updateMenu();
}
}
unsigned long aktuellX = millis();
// if (aktuellX - VorherigeX >= intervall) {
if (StateX < 50) { // wenn der joystick ziemlich am minus punkt ist
// VorherigeX = aktuellX;
menu--;
updateMenu();
// }
}
}
void updateMenu() {
switch (menu) {
case 0:
menu = 1;
break;
case 1:
Serial.println("Update Menu 1");
lcd.clear();
lcd.print(">MenuItem1");
lcd.setCursor(0, 1);
lcd.print(" MenuItem2");
break;
case 2:
Serial.println("Update Menu 2");
lcd.clear();
lcd.print(" MenuItem1");
lcd.setCursor(0, 1);
lcd.print(">MenuItem2");
break;
case 3:
Serial.println("Update Menu 3");
lcd.clear();
lcd.print(">MenuItem3");
lcd.setCursor(0, 1);
lcd.print(" MenuItem4");
break;
case 4:
Serial.println("Update Menu 4");
lcd.clear();
lcd.print(" MenuItem3");
lcd.setCursor(0, 1);
lcd.print(">MenuItem4");
break;
case 5:
menu = 4;
break;
}
}