Die halbe Sekunde kommt wohl von "delay(500);"
Das mit dem Code haut so nicht hin. Der muss anders gestaltet werden. Du willst doch "delay" raus haben.
Zuerst startest Du die Motoren.
Dann wartest Du in "loop()", bis 2 Sekunden um sind.
Dann stoppst Du die Motoren.
Die Funktion "void zwei_sec_links_rotieren(void)" ist von der Namensgabe her schon so nicht brauchbar, weil sie was falsches vermittelt, was Du dann vermutlich innerhalb der Funktion umzusetzen versuchst, weil ja sonst die Logik nicht zum Namen der Funktion passt.
Also mal anders denken, hier ein Beispiel:
Was brauchst Du für Funktionen?
Code:
void links_rotieren(void){
motor_hl->setSpeed(s_speed);
motor_hr->setSpeed(s_speed + 1);
motor_vr->setSpeed(s_speed + 1);
motor_vl->setSpeed(s_speed);
motor_hl->run(BACKWARD);
motor_hr->run(FORWARD);
motor_vr->run(FORWARD);
motor_vl->run(BACKWARD);
}
void alle_motoren_halt(void){
...
}
Welche Variablen außerhalb von "loop()" brauchst Du?
Code:
int status = 0;
unsigned long previousMillis, currentMillis, dauer_fahrt;
Wie in "loop()" aufrufen?
Code:
currentMillis = millis();
if (status == 0) {
status = 1;
previousMillis = currentMillis;
dauer_fahrt = 2000;
links_rotieren();
}
if (status == 1 && (currentMillis - previousMillis) > dauer_fahrt) {
alle_motoren_halt();
}
PS: der Code soll nur am Beispiel zeigen, wie es funktionieren kann.
MfG
Lesezeichen