Danke für die ausführliche Info. Was ich UP nenne, nennst du offensichtlich Funktion. Soll mir recht sein.
Zum Thema goto hier mal ein Beispiel. mir ist klar, dass man das auch anders machen kann, aber ist es hier nicht sinnvoll?
Code:if (dir == 0 && (micros() - M5_microsalt) > Schrittdauer) { // Drehrichtung
switch (M5_i) { // es soll nur ein Schritt ausgeführt werden.
case 0:
M5_i = 1;
goto M5_0;
break;
case 1:
M5_i = 2;
goto M5_1;
break;
case 2:
M5_i = 3;
goto M5_2;
break;
case 3:
M5_i = 4;
goto M5_3;
break;
case 4:
M5_i = 5;
goto M5_4;
break;
case 5:
M5_i = 6;
goto M5_5;
break;
case 6:
M5_i = 7;
goto M5_6;
break;
case 7:
M5_i = 0;
goto M5_7;
break;
}
} // ************ ENDE if (dir == 0 && (micros() - M5_microsalt) > Schrittdauer)
else if (dir == 1 && (micros() - M5_microsalt) > Schrittdauer) { // Drehrichtung
switch (M5_i) { // es soll nur ein Schritt ausgeführt werden.
case 0:
M5_i = 1;
goto M5_7;
break;
case 1:
M5_i = 2;
goto M5_6;
break;
case 2:
M5_i = 3;
goto M5_5;
break;
case 3:
M5_i = 4;
goto M5_4;
break;
case 4:
M5_i = 5;
goto M5_3;
break;
case 5:
M5_i = 6;
goto M5_2;
break;
case 6:
M5_i = 7;
goto M5_1;
break;
case 7:
M5_i = 0;
goto M5_0;
break;
}
M5_0:
digitalWrite(p1, HIGH);
digitalWrite(p2, LOW);
digitalWrite(p3, LOW);
digitalWrite(p4, LOW);
goto M5_Schritt;
M5_1:
digitalWrite(p1, HIGH);
digitalWrite(p2, HIGH);
digitalWrite(p3, LOW);
digitalWrite(p4, LOW);
goto M5_Schritt;
M5_2:
digitalWrite(p1, LOW);
digitalWrite(p2, HIGH);
digitalWrite(p3, LOW);
digitalWrite(p4, LOW);
goto M5_Schritt;
M5_3:
digitalWrite(p1, LOW);
digitalWrite(p2, HIGH);
digitalWrite(p3, HIGH);
digitalWrite(p4, LOW);
goto M5_Schritt;
M5_4:
digitalWrite(p1, LOW);
digitalWrite(p2, LOW);
digitalWrite(p3, HIGH);
digitalWrite(p4, LOW);
goto M5_Schritt;
M5_5:
digitalWrite(p1, LOW);
digitalWrite(p2, LOW);
digitalWrite(p3, HIGH);
digitalWrite(p4, HIGH);
goto M5_Schritt;
M5_6:
digitalWrite(p1, LOW);
digitalWrite(p2, LOW);
digitalWrite(p3, LOW);
digitalWrite(p4, HIGH);
goto M5_Schritt;
M5_7:
digitalWrite(p1, HIGH);
digitalWrite(p2, LOW);
digitalWrite(p3, LOW);
digitalWrite(p4, HIGH);
goto M5_Schritt;