Hallo inka,

solltest Du momentan diese Variante
Code:
void alle_stepper_vorwaerts()
{


  hindernis_vorh();
  if (hindernis == true)
  {
     Serial.print("hindernisabfrage in - alle_stepper_vorwärts -");
     alle_stepper_rueckwaerts();
  }
  // !!! Im Fall das hinderniss == false ist führt das zu einer Rekursion ohne Widerkehr !!!
  else alle_stepper_vorwaerts();


  
  vorwaerts = true;
  stepper_VL.setRPM(12);
  stepper_HL.setRPM(12);
  stepper_HR.setRPM(12);
  stepper_VR.setRPM(12);


  stepper_VL.setSPR(4075.7728395);
  stepper_HL.setSPR(4075.7728395);
  stepper_HR.setSPR(4075.7728395);
  stepper_VR.setSPR(4075.7728395);


  stepper_VL.setDirection(CW);
  stepper_VL.rotate(1);
  stepper_HL.setDirection(CW);
  stepper_HL.rotate(1);
  stepper_HR.setDirection(CW);
  stepper_HR.rotate(1);
  stepper_VR.setDirection(CW);
  stepper_VR.rotate(1);
  //vorwaerts = true;
}


void alle_stepper_rueckwaerts()
{
  Serial.print("fahre rückwärts nach hindernisabfrage in - alle_stepper_vorwärts -");
  rueckwaerts = true;
  stepper_VL.setRPM(12);
  stepper_HL.setRPM(12);
  stepper_HR.setRPM(12);
  stepper_VR.setRPM(12);


  stepper_VL.setSPR(4075.7728395);
  stepper_HL.setSPR(4075.7728395);
  stepper_HR.setSPR(4075.7728395);
  stepper_VR.setSPR(4075.7728395);


  stepper_VL.setDirection(CCW);
  stepper_VL.rotate(1);
  stepper_HL.setDirection(CCW);
  stepper_HL.rotate(1);
  stepper_HR.setDirection(CCW);
  stepper_HR.rotate(1);
  stepper_VR.setDirection(CCW);
  stepper_VR.rotate(1);
  //rueckwaerts = true;
}
im Einsatz haben, landest Du für den Fall das kein Hindernis erkannt wird in einer endlos Rekursion. Dein Program hängt sich schlicht auf und ich vermute das System rebootet immer wieder. Prüfen könntest Du das, wenn Du in die setup-Funktion am Ende mal ein "Serial.println("setup ende")" oder so schreiben würdest. Das sollte dann mehrfach in der Console zwischen den "Ping: xxx cm" erscheinen.

Falls Du noch die NewPing lib benutzt gibt es bei "ping()" einen Sonderfall zu berücksichtigen:
Wenn der US-Sensor ins Unendliche zeigt, liefert die Funktion eine Null zurück. In Deiner Funktion:
Code:
void hindernis_vorh(void)
{
  if (start_ping == false) ping_distanz();


  if (((uS / US_ROUNDTRIP_CM) <= 10))
    hindernis = true;
}
kann "hindernis" also auch "true" sein. Daher muß eine weitere Abfrage da hinein:
Code:
void hindernis_vorh(void)
{
  if (start_ping == false) ping_distanz();


  if(uS > 0) {
    if (((uS / US_ROUNDTRIP_CM) <= 10))
      hindernis = true;
  } else {
      hindernis = false;
  }
}
meine Funktion funktionert so leider auch nicht. Weil mir "check_timer()" bei einem Blick hinter die Sensorreichweite keine Info darüber gibt, dass ein Time-Out stattgefunden hat. Muss man sich also selbst merken.
Code:
void sonarDummyFunc() { return; }

bool hindernis_vorh() {
   static bool sensor_misst = false; // Beim Prg Start läuft der Sensor noch nicht 
   static bool erg_vorher = false; // Beim Start noch keine Messung vorhanden
   static unsigned long start_zpkt = 0; // Fuer's timeout

   if(sensor_misst) {
      if(sonar.check_timer()) {
         erg_vorher = (sonar.ping_result / US_ROUNDTRIP_CM) <= 10; // Oder welche Entfernung auch immer
         sensor_misst = false;
      } else if( (start_zpkt - millis()) >= 50 ) { // Falls Distanz hinter Sensorreichweite,
                                                             // nach 50ms erneut messen ermöglichen.
         erg_vorher = false;
         sensor_misst = false;
      }
   } else {
     sonar.timer_stop();
     sonar.ping_timer(sonarDummyFunc);
     sensor_misst = true;
     start_zpkt = millis();
   }

   return erg_vorher;
}
Gruß

Chris