sketch72_esp_roboter_schrittmotor_drehung_bewegungsablauf (ESP8266 NodeMCU)

sketch72_esp_roboter_schrittmotor_drehung_bewegungsablauf
  /*In diesem Sketch wir eine Ablaufsteuerung, d.h.kompletter Bewegungsablauf, fuer den Roboter programmiert.
  Aber nur fuer den Schrittmotor (Drehung Roboter), nicht fuer die Servos.
  Der Schrittmotor wird mit Schrittfrequenz 50 Schritten/s betrieben, dann kann jeweils am Ende des 20ms Servo-Zyklus ein neuer 
  Schritt ausgefuehrt werden (vereinfacht den Sketch wenn auch die Servos mit gesteuert werden sollen).
  Es wird jeweils 2 Sek Zeit gegeben um die neue Position sicher zu erreichen.
  Die neuen Positionen werden in das Array geladen. In Variable "a" muss Anzahl der Array-Elemente minus 1.
  https://starthardware.org/lektion-15-array/
  https://www.arduino.cc/reference/de/language/variables/data-types/array/
  Die Spannungsversorgung kann zwischen 5 ... 9V betragen, wenn VM und VIN verbunden werden (wenn Servos mit betrieben werden nur bis 7,2V).
  Der Schrittmotor hat eine Nennspannung von 12V und ist besonders bei niedriger Spannung sehr schwach.
  Deshalb sollte 7,2 V verwendet werden.
  Die Stromaufnahme des Schrittmotors ist relativ niedrig.
  
  Der Roboter muss manuell vor dem Start in die Startposition "0 Grad" gedreht werden (Referenzposition "50").
  */
  
  /*Schrittmotor Drehung Position Neu:*/
  byte POS_N[] = {50,   10,   90,   50 }; 
  
  byte i = 0;                                 // Zaehlvariable fuer Aufruf der Array-Elemente
  byte a = 3;                                 // Muss gleich der Anzahl der Array-Elemente minus 1 sein
  /*fuer Schrittmotor Drehung:*/
  byte POS_A = 50;                            // Schrittmotor Position alt = Startposition "50" 
  byte Status = 1;                            // Schrittmotor Status 1...4 (PinsD3D4: HH,LL,LH,HL)
  unsigned long timer_milli = 0;
  unsigned long timer_micro = 0;    
  
  void setup()
  {
   pinMode(D1, OUTPUT);                       // Schrittmotor ENA PWM Wicklung A
   pinMode(D2, OUTPUT);                       // Schrittmotor ENB PWM Wicklung B
   pinMode(D3, OUTPUT);                       // Schrittmotor Drehrichtung Wicklung A
   pinMode(D4, OUTPUT);                       // Schrittmotor Drehrichtung Wicklung B
   analogWrite (D1,1023);                     // PWM Wicklung A volle Aussteuerung - volle Spannung
   analogWrite (D2,1023);                     // PWM Wicklung A volle Aussteuerung - volle Spannung
  }
   
  void loop()
  {
   if (micros() > 20000 + timer_micro)        // 20ms erreicht? Dann ist ein Zyklus zum Servo beendet
   {                                          // und es kann ein neuer Schritt aufgerufen werden 
    timer_micro = micros();
    
    if(Status==1)                             
    {
     if(POS_N [i] - POS_A > 0)
     {
      digitalWrite(D3,LOW);                   // Schrittmotor Wicklungsbestromung LH (Status 2)
      digitalWrite(D4,HIGH); 
      Status=2;
      POS_A +=1; 
     }
     else if(POS_N [i] - POS_A < 0)
     {
      digitalWrite(D3,HIGH);                  // Schrittmotor Wicklungsbestromung HL (Status 4)
      digitalWrite(D4,LOW); 
      Status=4;
      POS_A -=1; 
     }
    } 
    else if(Status == 2)
    {
     if(POS_N [i] - POS_A > 0)
     {
      digitalWrite(D3,LOW);                   // Schrittmotor Wicklungsbestromung LL (Status 3)
      digitalWrite(D4,LOW); 
      Status=3;
      POS_A +=1; 
     }
     else if(POS_N [i] - POS_A < 0)
     {
      digitalWrite(D3,HIGH);                  // Schrittmotor Wicklungsbestromung HH (Status 1)
      digitalWrite(D4,HIGH); 
      Status=1;
      POS_A -=1; 
     }
    }
    else if(Status==3)
    {
     if(POS_N [i] - POS_A > 0)
     {
      digitalWrite(D3,HIGH);                  // Schrittmotor Wicklungsbestromung HL (Status 4)
      digitalWrite(D4,LOW); 
      Status=4;
      POS_A +=1;  
     }
     else if(POS_N [i] - POS_A < 0)
     {
      digitalWrite(D3,LOW);                   // Schrittmotor Wicklungsbestromung LH(Status 2)
      digitalWrite(D4,HIGH); 
      Status=2;
      POS_A -=1;  
     }
    }
    else if(Status==4)
    {
     if(POS_N [i] - POS_A > 0)
     {
      digitalWrite(D3,HIGH);                  // Schrittmotor Wicklungsbestromung HH (Status 1)
      digitalWrite(D4,HIGH); 
      Status=1;
      POS_A +=1;  
     }
     else if(POS_N [i] - POS_A < 0)
     {
      digitalWrite(D3,LOW);                   // Schrittmotor Wicklungsbestromung LL (Status 3)
      digitalWrite(D4,LOW); 
      Status=3;
      POS_A -=1;  
     }
    } 
    if(POS_N [i] - POS_A == 0)
    {
     POS_A = POS_N [i];                       // Wenn die neue Position POS_N erreicht wurde
    }
    else
    {
    }      
   } 
   else
   {
   }
   if (millis() > 2000 + timer_milli)         // 2 Sek erreicht ? Solange wird Zeit gegeben, die Position zu erreichen.
   {
    timer_milli = millis();
    if (i < a)                                // alle Elemente des Arrays abgearbeitet (kpl Bewegungsablauf erfolgt) ?
    {
     i= i + 1;
    }
    else
    {
     i = 0;                                   // erneut Beginn mit Array-Element 0 (Bewegungsablauf wiederholen)
    }
   }
   else
   {
   } 
  }