In while-Schleife gefangen

achja ich benutze einen AtMega2560 + aufgesetzten RAMPS 1.4.

Und wer Lust hat sich durch den komletten Code zu wühlen darf dies gerne tun :slight_smile: den poste ich hier jetzt auch nochmal denn ich habe im Post oben nur die relevanten Stellen herauskopiert.

#include <AccelStepper.h>

AccelStepper Z_stepper(1, 46, 48); // 1=SM-Treiber,46=Z-STEP,48=Z-DIR
AccelStepper Y_stepper(1, 60, 61); // 1=SM-Treiber,60=Y-STEP,61=Y-DIR
String teilstring[3];
String inputString = "", Y_Modus, Z_Modus, Status_F_sensoren;
boolean F_sensor_B3 = false, F_sensor_B4 = true, F_sensor_B5 = true, F_sensor_B6 = false, stringComplete = false, bereit = false;
int n = 0;

void setup()
{
  // Serielle Schnittstelle mit Baudrate: 9600, Stopbits: 1, Paritätbit: 0, Datenbits: 8 initialisieren
  Serial.begin(9600);

  // 200 Bytes für Input reservieren
  inputString.reserve(200);

  //Pins initialisieren
  pinMode(13, OUTPUT);
  pinMode(11, INPUT);
  pinMode(6, INPUT);
  pinMode(5, INPUT);
  pinMode(4, INPUT);
  Y_stepper.setEnablePin(56);
  Z_stepper.setEnablePin(62);
  Z_stepper.setPinsInverted(false, false, true);
  Y_stepper.setPinsInverted(false, false, true);
}

void loop()
{
  if (stringComplete == true)
  {

    if (teilstring[0] == "Z")
    {
      Z_Motor_bewegen(teilstring[1], teilstring[2].toInt());
    }

    else if (teilstring[0] == "Y")
    {
      Y_Motor_bewegen(teilstring[1], teilstring[2].toInt());
    }

    else if (teilstring[0] == "F" && teilstring[1] == "senden")

    {
      //Status_F_Sensoren_pruefen();
      Status_F_Sensoren_senden();
      bereit = false;
      // Serial.print(bereit);
      Serial.print("ich versuche bereit auf 1 zu setzen");
      while (bereit == false)
      {
       
      }
      Serial.print("bereit wurde auf 1 gesetzt");
    }


    else if (teilstring[0] == "Ventil")
    {
      if (teilstring[1] == "1")
      {
        digitalWrite(13, HIGH);
      }
      else
      {
        digitalWrite(13, LOW);
      }
    }

    // Fehlercode: String konnte keinem Motor zugewiesen werden
    else
    {
      for (int i = 0; i < 4; i++)
      {
        digitalWrite(13, HIGH);
        delay(200);
        digitalWrite(13, LOW);
        delay(200);
      }
      for (int i = 0; i < 3; i++)
      {
        teilstring[i] = "";
      }


    }

    String_senden("bereit;1\n");
    stringComplete = false;
  }
}
 // RX - Interrupt
  void serialEvent()
  {

    while (Serial.available())
    {
      char inChar = (char)Serial.read();
      inputString += inChar;
      if (inChar == '\n')
      {
        Splitcode();
        stringComplete = true;
      }
    }
  }

  // teilt den Code in 3 teilstrings auf
  void Splitcode()
  {
    n = 0;
    String buffer = "";
    for (int i = 0; i < inputString.length(); i++)
    {
      if ((inputString[i] == ';') || (inputString[i] == '\n'))
      {
        teilstring[n] = buffer;
        buffer = "";
        n++;
         if(teilstring[1] == "bereit")
        {
          bereit = true;
        }
      }
      else
      {
        buffer += inputString[i];
      }
    }
    inputString = "";
  }

  //Bewegt den Y_Schrittmotor
  void Y_Motor_bewegen(String Y_Modus, int Y_Position)
  {
    //Modus 1 = Positionierungsfahrt
    if (Y_Modus == "1")
    {
      Y_stepper.enableOutputs();
      Y_stepper.setAcceleration(1000);
      Y_stepper.moveTo(Y_Position);
      Y_stepper.setSpeed(800);
      Y_stepper.runToPosition();
      Y_stepper.disableOutputs();
    }

    //Modus 2 = Gießfahrt
    else if (Y_Modus == "2")
    {
      Y_stepper.enableOutputs();
      Y_stepper.setAcceleration(1000);
      Y_stepper.moveTo(Y_Position);
      Y_stepper.setSpeed(200);
      Y_stepper.runToPosition();
      Y_stepper.disableOutputs();
    }

    // Modus 3 = Initialisierungsfahrt
    /*else if (Y_Modus == "3")
    {
    Y_stepper.enableOutputs();
    Y_stepper.setAcceleration(100);
    Y_stepper.moveTo(-20000);
    Y_stepper.setSpeed(100);
    while (digitalRead(? == LOW))
    {
    if (digitalRead(? == LOW))
    {
    Y_stepper.run();
    }
    }
    Y_stepper.disableOutputs();
    }*/

    // Fehlerblinkcode falls kein Modus gefunden oder fehlerhaft
    else
    {
      for (int i = 0; i < 6; i++)
      {
        digitalWrite(13, HIGH);
        delay(200);
        digitalWrite(13, LOW);
        delay(200);
      }
    }
  }

  //Bewegt den Z_Schrittmotor
  void Z_Motor_bewegen(String Z_Modus, int Z_Position)
  {
    // Modus 1 = Positionierungsfahrt
    if (Z_Modus == "1")
    {
      Z_stepper.enableOutputs();
      Z_stepper.setAcceleration(300);
      Z_stepper.moveTo(Z_Position);
      Z_stepper.setSpeed(900);
      Z_stepper.runToPosition();
      Z_stepper.disableOutputs();
    }

    //Modus 2 = Gießfahrt
    else if (Z_Modus == "2")
    {
      Z_stepper.enableOutputs();
      Z_stepper.setAcceleration(5000);
      Z_stepper.moveTo(Z_Position);
      Z_stepper.setSpeed(200);
      Z_stepper.runToPosition();
      Z_stepper.disableOutputs();
    }

    // Modus 3 = Initialisierungsfahrt
    /*else if (Y_Modus == "3")
    {
    Z_stepper.enableOutputs();
    Z_stepper.setAcceleration(100);
    Z_stepper.moveTo(-20000);
    Z_stepper.setSpeed(100);
    while (digitalRead(? == LOW))
    {
    if (digitalRead(? == LOW))
    {
    Z_stepper.run();
    }
    }
    Z_stepper.disableOutputs();
    }*/
  }

  void Status_F_Sensoren_senden()
  {
    uint8_t Status = B00000000;

    // Feuchtigkeitssensor B3 in Q1
    if (F_sensor_B3)
    {
      Status = Status | B00000001;
    }
    // Feuchtigkeitssensor B4 in Q2
    if (F_sensor_B4)
    {
      Status = Status | B00000010;
    }

    // Feuchtigkeitssensor B5 in Q3
    if (F_sensor_B5)
    {
      Status = Status | B00000100;
    }

    // Feuchtigkeitssensor B6 in Q4
    if (F_sensor_B6)
    {
      Status = Status | B00001000;
    }

    Serial.print((String)Status);
  }

  /*void Status_F_Sensoren_pruefen()
  {
  // Feuchtigkeitssensor B3
  if (digitalRead(4) == HIGH)
  {
  F_sensor_B3 = true;

  }

  else
  {
  F_sensor_B3 = false;
  }

  // Feuchtigkeitssensor B4
  if (digitalRead(5) == HIGH)
  {
  F_sensor_B4 = true;
  }

  else
  {
  F_sensor_B4 = false;
  }

  // Feuchtigkeitssensor B5
  if (digitalRead(6) == HIGH)
  {
  F_sensor_B5 = true;
  }

  else
  {
  F_sensor_B5 = false;
  }

  // Feuchtigkeitssensor B6
  if (digitalRead(11) == HIGH)
  {
  F_sensor_B6 = true;
  }

  else
  {
  F_sensor_B6 = false;
  }

  }
  */