delay-millis()-while-Sensorenabfrage
|
23.02.2020, 13:41
Beitrag #1
|
|||
|
|||
delay-millis()-while-Sensorenabfrage
Hallo zusammen,
möchte noch einmal das Thema millis() und while ansprechen. Zur Steuerung der Modellbahn läuft bei mir ein längeres Programm. Zur Abfrage meiner Sensoren habe ich den relevanten Teil einmal kopiert. Code: #include <Bounce2.h> Mit Hilfe von debounce werden die Sensoren abgefragt. Der counter wird jeweils weiter gezählt. Nach einer verzögerungszeit von 380 ms erfolgt eine Abfrage mit if. Mit while funktioniert alles bestens. Habe nun anstatt while die millis() Funktion eingesetzt. Allerdings ohne Erfolg. Das Programm läuft nicht mehr wir gewohnt ab. Hat jemand einen Tipp? Mit freundlichen Grüßen Norbert |
|||
23.02.2020, 13:55
Beitrag #2
|
|||
|
|||
RE: delay-millis()-while-Sensorenabfrage
(23.02.2020 13:41)RCudino schrieb:Da kannst Du auch millis weg lassen und gleich delay schreiben. Das macht auch nichts anderes. Nimmt er überhaupt den Variablennamen mit ö an? Mit millis musst Du natürlich die Struktur Deines Programms ändern. Code: bool startet = false; Da Deinem Code nicht anzusehen ist, wie er reagieren soll, ist das natürlich nur geschätzt. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
23.02.2020, 14:06
(Dieser Beitrag wurde zuletzt bearbeitet: 23.02.2020 14:07 von MicroBahner.)
Beitrag #3
|
|||
|
|||
RE: delay-millis()-while-Sensorenabfrage
Hallo Norbert,
als Mobahner ist vielleicht dieses Tutorial was für dich. Da habe ich mal für 'Modellbahner' erklärt, wie man Zeitsteuerungen ohne delay() realisiert. Gruß, Franz-Peter |
|||
23.02.2020, 14:40
Beitrag #4
|
|||
|
|||
RE: delay-millis()-while-Sensorenabfrage
Hallo Tommy,
vielen Dank für den Input. Habe deinen Input in mein Programm eingepflegt . Es reagiert leider auch , wie meine Änderung mit millis. Ich glaube, es liegt vielleicht daran, dass nach der verzoegrungszeit nichts direktes passieren soll. // hier kammt das hin, was Du aller verzoegerung machen willst. Es erfolgen nur jeweils die if -Abfragen nach dem Status des counters. Die Verzoegerungszeit ist wie beim delay eine Wartezeit von z.B. 380ms und dann erfolgen die diversen if - Abfragen Hallo MicroBahner, Vielen Dank. Schaue ich mir natürlich auch an. Habe auch schon viele codes mit millis() erfolgreich programmiert, aber diesmal ??? Mit freundlichen Grüßen Norbert |
|||
23.02.2020, 15:17
Beitrag #5
|
|||
|
|||
RE: delay-millis()-while-Sensorenabfrage
Schreib/mal dir doch mal genau auf, was in welcher Reihenfolge passieren soll.
Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
23.02.2020, 15:30
Beitrag #6
|
|||
|
|||
RE: delay-millis()-while-Sensorenabfrage
- Im Loop wird der Sensor - Eingang permanent abgefragt mit debounce
- Wurde ein High - Signal detektiert zählt der counter weiter - Jetzt erfolgt die Wartezeit von 380ms - Jetzt die if Abfrage, ob der counter z.B. "1" ist - Wenn ja, dann stellt sich z.B. die Weiche von geradeaus auf abbiegen oder ein Gleisabschnitt wird freigegeben( Lok fährt los) oder gesperrt ( Lok hält an) Mit freundlichen Grüßen Norbert |
|||
23.02.2020, 15:33
Beitrag #7
|
|||
|
|||
RE: delay-millis()-while-Sensorenabfrage
(23.02.2020 15:30)RCudino schrieb: - Im Loop wird der Sensor - Eingang permanent abgefragt mit debounce Wenn der Arduino nichts anderes machen soll, wäre hier ein delay(380) durchaus sinnvoll. Wofür ist das Warten von 380 ms gut? Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
23.02.2020, 15:45
Beitrag #8
|
|||
|
|||
RE: delay-millis()-while-Sensorenabfrage
Ja, delay oder while ist auch unkritisch , da die gesamten Ablaufzeiten auch lang sind.
Ich wollte es nur mal mit millis() auch hinbekommen. Die 380ms sind dazu gedacht, dass wenn der Sensor detektiert wurde die Lok noch ein wenig über den Sensor hinaus fährt. Erst dann wird das Gleis abgeschaltet .Erst dann wird beim Freischalten diese Gleisabschnittes der Sensor wieder eindeutig erkannt, der counter zählt weiter und eine andere If Abfrage wird wahr ( z.B. Weichenstellung). Ich habe meine komplette Ablaufsteuerung mit dem Weiterzählen des counters aufgebaut. Daher eindeutige Erkennung des Sensors ist notwendig. Dies funktioniert auch gut. Mit freundlichen Grüßen Norbert |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste