Hallo,
Wenn ich es richtig sehe, hast Du schon den richtigen Ansatz genommen.
Hier so ein ähnlicher:
1. Du erstellst eine Variable zum Zählen: count oder delay
2. Du durchläufst den Code ohne die Standrad-Delay-Funktion aufzurufen.
3. Am Anfang von loop() ermittelst Du die verstrichene Zeit, dafür gibt es z.B.: millis()
4. aus diesem Miilis()-Wert und dem Letzten ermittelst Du, durch Subtraktion, die Differenz.
5. In einer Schleife kannst Du deine Zählervariable herunterzählen, solang diese (und die berechnete Differenz der Millis) noch größer "0" ist.
6. Wenn Deine Zählervariable "0" erreicht hat, führst Du die Aktion aus.
Alternative für Schritt 5: statt die Zählervariable per Schleife herunter zu zählen, kannst Du auch eine schnellere Variante, mit Subtraktion, wählen.
Wenn also der Wert der Zählervariable größer ist, als die o.g. berechnete Differenz, ziehst Du die Differenz von der Zählervariable ab und fertig.
Wenn der Wert der Zählervariable kleiner ist, als die Differenz, setzt Du die Zählervariable auf "0" und bist ebenfalls fertig.
Dein Ansatz funktioniert auch.
MfG
- - - Aktualisiert - - -
Ich glaube, da ist noch ein Fehler. Du willst, dass die Schleife eine bestimmte Zeit durchlaufen wird und dann nicht mehr. Das müsste dann eigentlich wie folgt aussehen.
Code:
dauer_fahrt = 500;
if (currentMillis - previousMillis < dauer_fahrt) {
Serial.println("halbe sec vorwärts");
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(FORWARD);
motor_hr->run(FORWARD);
motor_vr->run(FORWARD);
motor_vl->run(FORWARD);
}
Lesezeichen