Arduino Millis geht nicht

Guten Tag,

ich habe eine Millisfunktion und verstehe nicht warum diese nicht weiterschaltet.

Ich programmiere mit VisualStudio aber es ist ja fast das gleiche wie mit dem Arduino IDE.

Qx_Saug wird noch geschrieben danach passiert aber nichts mehr?

Warum geht es nicht weiter?

else if (Saugmodus==1 and BAT_OK==0 and digitalRead(Ix_BT1) or digitalRead(Ix_MCU1))      //Startvorgang Sauger und Wischer
{

    currentMillis = millis();                     //Anfang zählung Zeit

    if (currentMillis - startMillis >= 50)        //nach 50ms starten des Saugers
    {
      digitalWrite(Qx_Saug, true);       
      startMillis = currentMillis;        
    }
    else if (currentMillis - startMillis >= 1000)
    {
      digitalWrite(Qx_Wisch1, true);              //10 Sekunden danach, start des 1. Wischers
      startMillis = currentMillis; 
    }
    else if (currentMillis - startMillis >= 200)
    { 
      digitalWrite(Qx_Wisch2, true);             //Nach 200ms, start des 2. Wischers 
      startMillis = currentMillis; 
      Saugmodus = 2;
    }


}
else if (Saugmodus==2 and BAT_OK==0 and digitalRead(Ix_BT1)==1 or digitalRead(Ix_MCU1)==1)

Wenn du uns deinen Sketch zeigst, direkt im Forum und in Code-Tags, dann können wir den prüfen und evtl. deinen Fehler sehen.
Code mit der Schaltfläche </> oben links im Editorfenster.

Ist doch klar: Weil die Differenz nie größer als 50 werden kann.
(was zumindest ein Grund ist)

Ah logisch dann schreibt es einfach Qx_Saug immer, wie könnte ich das am besten lösen?

Du musst den größten Wert zuerst abfragen. Sonst überschneidet sich das

Das wird ihm nichts helfen. Das >=50 wird immer zuerst wahr, egal in welcher Reihenfolge er abfragt.
Er könnte es mit einer Schrittkette/Ablaufsteuerung lösen.
Du kannst auch hier im Forum mal nach 'Schrittkette' suchen - da gibt's viele Beiträge zu.

MicroBahner:
Das wird ihm nichts helfen. Das >=50 wird immer zuerst wahr, egal in welcher Reihenfolge er abfragt.
Er könnte es mit einer Schrittkette/Ablaufsteuerung lösen.

Ja, ich habe jetzt einfach eine Variabel eingefügt die bei jedem Punkt eins höher gestellt wird.

else if (Saugmodus==1 and BAT_OK==0 and digitalRead(Ix_BT1) or digitalRead(Ix_MCU1))      //Startvorgang Sauger und Wischer
{

   currentMillis = millis();                     //Anfang zählung Zeit

   if (currentMillis - startMillis >= 50 and Static==0)        //nach 50ms starten des Saugers
   {
     digitalWrite(Qx_Saug, true);       
     startMillis = currentMillis; 
     Static = 1;       
   }
   else if (currentMillis - startMillis >= 1000 and Static==1)
   {
     digitalWrite(Qx_Wisch1, true);              //10 Sekunden danach, start des 1. Wischers
     startMillis = currentMillis; 
     Static = 2;
   }
   else if (currentMillis - startMillis >= 200 and Static == 2)
   { 
     digitalWrite(Qx_Wisch2, true);             //Nach 200ms, start des 2. Wischers 
     startMillis = currentMillis;
     Static = 0;
     Saugmodus = 2;
   }

MicroBahner:
Das >=50 wird immer zuerst wahr, egal in welcher Reihenfolge er abfragt.

Soll es ja auch. Das geht aber auch nicht weil die Reihenfolge wahrscheinlich "50, 1000, 200" sein soll und nicht "50, 200, 1000". Hatte ich übersehen. Dann braucht man in der Tat einen ganz anderen Ansatz