Moin,
Ich habe folgendes Problem:
Seit ca. einem Monat bin ich in der Schule dabei mich mit dem Arduino zu beschäftigen. Das Forum hat mir schon oft geholfen, da mein Lehrer selbst nicht so richtig weiß was er uns erzählt. jetzt habe ich das Problem, dass ich einen Motor für die Zeit x ansteuern soll aber sobald ein Taster gedrückt wird diese Zeit x wieder von Anfang an starten soll. Wie ich hier gelesen habe, kann ich das ja nicht über delay machen, weil mein Programm für die Zeit ja angehalten wird. Ich habe mir das zu BlinkWithoutDelay durchgelesen, damit kann ich aber leider nicht viel anfangen. Ebenso muss die Ansteuerung jederzeit über einen zweiten Taster abgebrochen werden können und eine Warnlampe angehen.
Ich entschuldige mich schonmal für diese "banale" Frage und danke für antworten
hator:
.....
Ich habe mir das zu BlinkWithoutDelay durchgelesen, damit kann ich aber leider nicht viel anfangen.
.....
Hallo,
das reine durchlesen reicht meist nicht. Da musst du das auch verstehen, da kommst du nicht drum herum.
Somit heißt das, das Beispiel nochmals lesen und auch nachbauen, bis du es verstehst.
Sorry, aber das können wir dir nicht abnehmen.
doch, BlinkWithoutDelay ist schon das Modell das du brauchst
millis ist deine "Systemzeit".
wenn du den Taster drückst startest du den Motor und merkst dir deine millis in einer unsigned long previousMillis.
In einem separten if prüftst permanent ob millis()-previousMillis > deinem Intervall ist, - dann schaltest du ab.
Alt würde man sagen, das ist ein retriggerbares Nachlaufrelais.
Hier gibts mehr dazu:
https://werner.rothschopf.net/202003_arduino_retriggerbares_nachlaufrelais.htm
ps.:
Wie ich hier gelesen habe, kann ich das ja nicht über delay machen, weil
... weil man es nicht tun soll, wenn man mit millis auch hinkommt. Alternativ gibts es mindestens zwei weitere Methoden wie man das mit delay auch hinbekommt. Aber wir wollen jetzt dich und deinen Lehrer nicht überfordern ^^
(deleted)
vielen dank für die antworten.
dann werde ich mich nochmal mit der BlinkWithoutDelay auseinandersetzen. Ich dachte eigentlich, dass ich das verstanden habe, habe mich wohl geirrt.
Du dafst die Kontrolle durch die Millis nicht mit dem Delay vergleichen, also darft nicht darauf hinarbeiten Delay durch Millis zu ersetzen. Sondern es geht ganz anders. Delay stoppt ALLES für eine angegebene Zeit. Mit Millis läuft der LOOP immer weiter, und es wird nur an einer Stelle im LOOP kontrolliert, ob der Motor weiter laufen soll, oder abgeschalten werden soll weil die Zeit abgelaufen ist. Deshalb kann weiter bei jedem Durchlauf des LOOP´s erneut geprüft werden, ob eine Taste gedrückt wurde und deshalb die Laufzeit des Motors wieder hochgesetzt werden soll.
LOOP
ist die Laufzeit in Millis abgelaufen? Nein?
{
Motor wird eingeschalten
}
else (ja, die Zeit ist abgelaufen)
{
{Motor wird ausgeschalten)
}
ist ein tatster gedrückt? Ja?
{
Startzeit für Motor wird neu übergeben
}
LOOP neuer Durchgang startet wieder oben
Dieser LOOP wird automatisch innerhalb ein paar millis laufend neu durchlaufen. So schnell kannst du nicht mit dem Auge zwinkern, wie so ein LOOP durchlaufen ist und neu beginnt!
hator:
vielen dank für die antworten.
dann werde ich mich nochmal mit der BlinkWithoutDelay auseinandersetzen. Ich dachte eigentlich, dass ich das verstanden habe, habe mich wohl geirrt.
Wenn du es verstanden hast, warum schreibst du dann dies
Ich habe mir das zu BlinkWithoutDelay durchgelesen, damit kann ich aber leider nicht viel anfangen.
im Eingangspost ?
Such nach der Nachtwächtererklährung.
Delay ist wie permanent aus dem Fenster schauen ob es regnet. Du wartest bis die Wartezeit vorbei ist.
Millis ist wie immer mal wieder aus dem Fenster schauen ob's regnet. Du kontrollierst immer mal wieder ob die Wartezeit vorbei ist. Nebenbei kann etwas anderes gemacht werden.
Grüße Uwe