Problem mit while-Schleifen für Motor-Steuerung

Hallo Gemeinde

Ich möchte eine ziemlich simple Steuerung für einen DC-Motor realisieren. Der Motor soll per PWM angesteuert werden (Die Pulsbreite lässt sich per Poti einstellen) Der Motor dreht zu Beginn in die eine Richtung, bis der Endschalter Switch1 geschlossen wird. Nach einer Pause von 10 Sekunden dreht der Motor in die andere Richtung (Relais wird aktiviert für Umpolung), bis Endschalter 2 geschlossen wird.
Das Programm funktioniert soweit. Nur das mit den Endschaltern läuft noch nicht optimal. Manchmal stoppt der Motor erst nach einigen Sekunden, nachdem der Endschalter geschlossen wurde. Der sollte aber unmittelbar stoppen, wenn ein Endschalter aktiviert wird.
Jemand ne Idee, was ich falsch mache?

int Val;
int PotVal = A0; // Potentiometer attached to A0
int Motor = 9; // PWM Output for Motor attached to pin 9 (PWM Pin)
int Switch1 = 4; // End switch 1
int Switch2 = 7; // End switch 2
int Relais = 8;
int StateSwitch1 = LOW;
int StateSwitch2 = LOW;


void setup() {
  // put your setup code here, to run once:

Serial.begin(9600);

pinMode(PotVal, INPUT);
pinMode(Motor, OUTPUT);
pinMode(Switch1, INPUT);
pinMode(Switch2, INPUT);
pinMode(Relais, OUTPUT);
}

void loop() {

Val = analogRead(PotVal); //read Pot value

while(digitalRead(Switch1) == LOW){ //while Switch 1 LOW, turn Motor
  digitalWrite(Relais, LOW);
  analogWrite(Motor, Val/4); //PWM Output for Motor
  //delay(100);

}
analogWrite(Motor, 0);
delay(10000);

while(digitalRead(Switch2) == LOW){ //while Switch 2 LOW, turn Motor in other direction
  digitalWrite(Relais, HIGH);
  analogWrite(Motor, Val/4);
  //delay(100);

}
analogWrite(Motor, 0);
delay(10000);


}

Du musst auf while Schleifen und delay() verzichten. Du hast mit loop() schon eine Schleife. Wenn man das nicht-blockierend programmiert und je nach Zustand des Systems etwas tut oder nichts tut kann man auch sofort auf Ereignisse reagieren

Hallo,

jetzt bist Du schon seit 2016 dabei eigentlich solltest Du zwischen schon mitbekommen haben wie man sowas macht.

noch was, wie hast Du denn die Endschalter angeschlossen. Hast Du einen externe Pull-down Widerstand verwendet ?

Heinz