Joystick nimmt random werte an

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;

  }




}

Ich hab den Fehler soweit erstmal gefunden.
Ich habe das Breadboard mit Ground von dem Arduino verbunden jetzt geht es.
Wenn jemand weiß warum bitte schreiben

Dominik1313:
Ich hab den Fehler soweit erstmal gefunden.
Ich habe das Breadboard mit Ground von dem Arduino verbunden jetzt geht es.
Wenn jemand weiß warum bitte schreiben

Auch das sind Grundlagen, die du unbedingt lernen solltest.
In einem System gehören alle GND miteinander verbunden.
Ohne dem fehlt der elektrische Gegenpol oder Rückfluss.

Es gibt Ausnahmen, wenn eine galvanische Trennung gefordert wird, die hier aber nicht zutreffen.

Damit zukünftig solche Fehler vermieden werden, zeichne immer ein Schaltbild deines Projektes.
Dann findest du die Fehler leichter.