Alle For Schleifen in meinem Script werden übersprungen

Hallo,

Ich weiß nicht woran es liegen kann. Auch Google hat mir nicht weiter geholfen... Wie in der Überschrift schon zu lesen ist, in meinem Skript werden alle For-Schleifen einfach übersprungen. Ich hab es schon in allen möglichgen Variationen versucht, ohne Erfolg. Habt ihr einen Tip für mich!!????

#include <Bounce2.h>
#include <Wire.h>

/* Variablen und Ein-/Augänge werden definiert/nummereiert*/

void setup() {
  Serial.begin(9600);  
  // Endschalter Interrupts (HIGH, LOW, RISING, FALLING oder CHANGE)
  attachInterrupt(Interrupt_VOR, stopVorn,    FALLING);  // Ruft StopVor auf (entgegen der Steuerkonsole)
  attachInterrupt(Interrupt_RUE, stopHinten,  FALLING);  // Ruft StopZurueck auf (an der Steuerkonsole)
  // Taster/Schalter
  pinMode(Taster_TischVOR,  INPUT);
  pinMode(Taster_TischRUE,  INPUT);
  pinMode(Taster_Modus,  INPUT);
  pinMode(Schalter_Speed,  INPUT);  
  // LED's
  pinMode(LED_Yel,  OUTPUT);  
  // Motortreiberpins
  pinMode(Motor_AWO,   OUTPUT); // All windings off
  pinMode(Motor_direktion,  OUTPUT);
  pinMode(Motor_Pulse,     OUTPUT);
  
  // Berechnung der Schrittanzahl für Automatik und Maximalschritte
  iAutostep = (((iAutoWeg / iSteigung) * 360) / dblSchrWeite) + iAutoStepOffset; // Berechnung der Automatik Schrittweite
  iMaxStep  = (((iMaxWeg / iSteigung) * 360) / dblSchrWeite) + iMaxStepOffset;
}


// ZUM BEISPIEL DIESE SCHLEIFE!!
void ErrorBlink(){
  for(int i = 0; i <= 7; i++){
    Serial.println("www");
    delay(100);
    analogWrite(LED_Yel, 255);
    delay(100);
    analogWrite(LED_Yel, 255);
  }
}


void loop() {
  // Referenzfahrt nach Einschalten
  if (bFirstStart == HIGH) {
    digitalWrite(Motor_AWO, LOW); // All windings on
    Referenzfahrt();
  }


//............

}

Vielen Dank und schöne Grüße

Du nutzt die Funktion "ErrorBlink()" doch nicht.

wo rufst du die Funktion ErrorBlink() denn auf?
Edit: zu spät

Außerdem, kann da nix blinken, beide male 255 angegeben.

combie:
Außerdem, kann da nix blinken, beide male 255 angegeben.

Oh.. Schlechtes Beispiel, sry.

HotSystems:
Du nutzt die Funktion "ErrorBlink()" doch nicht.

Natürlich nutze ich diese Funktion, ist ja auch nur ein Codeschnipsel. Alles will ich ja auch nicht Posten.

Hier ein anderes Beispiel (inkl. kompletter Loop...):

//########################################
//             Automatik fahren                                           #
//########################################
void AutoFahren(){ 
  if(digitalRead(Taster_TischVOR)== HIGH && digitalRead(Taster_TischRUE)== LOW){
    if(iIsStep >= iMaxStep - iAutostep){
      ErrorBlink();
      return;
    }
    bRefOut = HIGH;
    bDirection = bVorfahren;
    digitalWrite(Motor_direktion, bDirection);
    Serial.println("Automatik vor"); 
    LED_AutoMode();
    lgStart = millis();
    int j = 0;

    // Diese Schleife fonktioniert tdellos !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    while (j<=iAutostep){
      j++;
      if(digitalRead(Schalter_Speed)==HIGH){
        Pulse(iAuto_delay_Fast);
      }
      else{
        Pulse(iAuto_delay_Slow);
      }
    }
    // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    
    bRefOut = LOW; 
  }
  if(digitalRead(Taster_TischRUE)== HIGH && digitalRead(Taster_TischVOR)== LOW){
    if(iIsStep <= iAutostep){
      ErrorBlink();
      return;
    }
    bRefOut_V = HIGH;
    bDirection = bRueckfahren;
    digitalWrite(Motor_direktion, bDirection);
    Serial.println("Automatik zurück");
    LED_AutoMode();
    lgStart = millis();

    // !!!!!!!!!!!!!!!!!!!!!!!!! DIE HIER NICHT   !!!!!!!!!!!!!
    for (int j = 0; j>=iAutostep; j++){ 
      if(digitalRead(Schalter_Speed)==HIGH){
        Serial.println("Test1");
        Pulse(iAuto_delay_Fast);
      }
      else{
        Serial.println("Test2");
        Pulse(iAuto_delay_Slow);
      }
    }
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

    
    bRefOut_V = LOW; 
  }
  lgDauer = millis() - lgStart;
  Serial.print("Dauer: ");
  Serial.println(lgDauer);
  analogWrite(LED_Yel, 0);
}


//########################################
//################# LOOP ##################
//########################################
void loop() {
  // Referenzfahrt nach Einschalten
  if (bFirstStart == HIGH) {
    digitalWrite(Motor_AWO, LOW); // All windings on
    Referenzfahrt();
  }

  // Automatik
  if(digitalRead(Taster_Modus)== LOW){
    analogWrite(LED_Yel, 0);
    if(digitalRead(Taster_TischVOR)== HIGH || digitalRead(Taster_TischRUE)== HIGH){
      digitalWrite(Motor_AWO, LOW); // All windings on
      AutoFahren();
    }
  }

  // Handbetrieb
  else {
    analogWrite(LED_Yel, 255);
    if(digitalRead(Taster_TischVOR)== HIGH || digitalRead(Taster_TischRUE)== HIGH){
      digitalWrite(Motor_AWO, LOW); // All windings on
      HandFahren();
    }
  }
}
for (int j = 0; j>=iAutostep; j++){

Ups. < oder <= würden mehr Sinn ergeben oder?

ludl8615:
Oh.. Schlechtes Beispiel, sry.
Natürlich nutze ich diese Funktion, ist ja auch nur ein Codeschnipsel. Alles will ich ja auch nicht Posten.

Ach und deshalb führst du uns aufs Glatteis ?

Und Whandall hat dir deinen Fehler schon aufgezeigt.

Whandall:

for (int j = 0; j>=iAutostep; j++){

Ups. < oder <= würden mehr Sinn ergeben oder?

Also rein Logisch betrachtet, nicht wirklich.. Oder!?!??

int j = 0;
while (j<=iAutostep) => Solange j kleiner iAutostep, wird die Schleife durchlaufen

for (int j = 0; j>=iAutostep; j++) => Solange j nicht größer/gleich iAutostep, wird die Schleife durchlaufen (angefangen bei j = 0)

Wenn also iAutostep = 10,

  • dann durchläuft die while-Schleife bis j >= 10. Also wenn Anfangswert j = 0, dann zehn Durchgänge.
  • die For Schleife fängt bei j = 0 an und hört auf wenn j größer/gleich 10. Also auch zehn mal...

Edit: Ich hab die Variable in der For-Schleife auch schon zu f geändert, um keine schon vorhandene Variable zu nutzen. Gleiches Problem..

ludl8615:
for (int j = 0; j>=iAutostep; j++) => Solange j nicht größer/gleich iAutostep, angefangen bei 0

Genau das ist dein Missverständnis.

Dein Statement bedeutet solange j größer oder gleich iAutoStep ist angefangen bei 0.

Das ist es nie, deswegen wird das nicht ausgeführt. Oder ist iAutoStep -1 oder kleiner?

Solange j nicht größer/gleich iAutostep, angefangen bei 0

Wo nimmst du das "nicht" her.
Ich sehe im Schleifenkopf kein ! oder not.
Da ist kein nicht.
Das gibt es nur in deinem Kopf.

for (byte i = 0; i<10; i++) {
  controllierterSchleifenkode();
}

entspricht

{
  byte i = 0;

  while (i<10) {
    controllierterSchleifenkode();
    i++;
  }
}

Whandall:
Genau das ist dein Missverständnis.

Dein Statement bedeutet solange j größer oder gleich iAutoStep ist angefangen bei 0.

Das ist es nie, deswegen wird das nicht ausgeführt. Oder ist iAutoStep -1 oder kleiner?

Ach... Himmel!! Ich hab seit zwei Jahren kein C++ mehr, nur Vb.NET. Da sieht die Sache anders aus!

Beispiel:
For j As integer = 0 To iAutostep Step 1
End For

Ich Dank dir! :wink: