Loop-Teil mit Interrupt für bestimmte Zeit stoppen
|
22.12.2019, 16:56
Beitrag #1
|
|||
|
|||
Loop-Teil mit Interrupt für bestimmte Zeit stoppen
Hallo zusammen,
ich bin neu hier im Forum. Habe zwar hier und da schon ein wenig mitgelesen , aber noch keine eigenen Beiträge erstellt. Ich bin jetzt seit einiger Zeit auf Rente ![]() Ich versuche zunächst die Basics zu erlernen, um dann später einige Projekte zu realisieren. Im Augenblick probiere ich gerade die INTERRUPTs zu verstehen. Das heisst, ich konnte das soweit umsetzen, aber an einer Sache beiße ich mir gerade meine dritten Zähne aus. Weshalb ich um eure Unterstützung bitten wollte. Ich habe hier ein Experiment aufgebaut, in dem ein paar LEDs als Lauflicht im Loop ein- und ausgeschaltet werden. Mit einem Interrupt greife ich in diesen Prozess ein und schalte eine zusätzlich LED über einen Taster ein. Damit konnte ich die Interrupt Geschichte sehr gut nachvollziehen...! Jetzt kommt allerdings der Knackpunkt. Ich möchte erreichen, dass der Loop-Teil beim (ISR) Tastendruck für eine bestimmte Zeit stoppt und danach weiter läuft. Ja, was soll ich sagen, ich krieg's nicht hin. Wer kann helfen? Hier mein Sketch: Code: int ledPins[5] = {8,9,10,11,12}; //LED Array an den Pin's 8-12 |
|||
22.12.2019, 17:02
(Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2019 17:12 von hotsystems.)
Beitrag #2
|
|||
|
|||
RE: Loop-Teil mit Interrupt für bestimmte Zeit stoppen
Dann willkommen im Forum.
Da du allerdings eine Frage stellst, die Software betrifft, passt diese nicht in den Bereich für Projekte, sondern eher in den Bereich "Software bzw. Programmierung". Was dein Problem betrifft, musst du mit einer Statusvariable arbeiten, die entsprechend deiner Pausenvorgabe das Lauflicht anhält. Diesen Ablauf musst du mittels der Funktion millis() programmieren, damit das ganze nicht blockiert. Sieh dir dazu BlinkWithoutDelay aus den Beispielen der IDE an. Gruß Dieter I2C = weniger ist mehr: weniger Kabel, mehr Probleme. ![]() |
|||
22.12.2019, 17:37
Beitrag #3
|
|||
|
|||
RE: Loop-Teil mit Interrupt für bestimmte Zeit stoppen
(22.12.2019 17:02)hotsystems schrieb: Da du allerdings eine Frage stellst, die Software betrifft, passt diese nicht in den Bereich für Projekte, sondern eher in den Bereich "Software bzw. Programmierung".Ups, muss ich jetzt selber was unternehmen, oder bleibt das jetzt so? Das mit dem “blink without delay“ hatte ich mir deswegen auch schon angesehen. Ich habe auch versucht, etwas mit der “while Schleife“ zu probieren, aber ich habe keinen Schimmer. Vielleicht kann mir jemand einen passenden Code-Schnippsel vorschlagen und ich werde mir das dann hinterher verinnerlichen. |
|||
22.12.2019, 17:41
(Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2019 17:44 von Tommy56.)
Beitrag #4
|
|||
|
|||
RE: Loop-Teil mit Interrupt für bestimmte Zeit stoppen
(22.12.2019 17:37)Alter Fritz schrieb:(22.12.2019 17:02)hotsystems schrieb: Da du allerdings eine Frage stellst, die Software betrifft, passt diese nicht in den Bereich für Projekte, sondern eher in den Bereich "Software bzw. Programmierung".Ups, muss ich jetzt selber was unternehmen, oder bleibt das jetzt so? Das wird ein Moderator verschieben. Das Lernen der Grundlagen kann Dir keiner abnehmen. Irgendwelche eigene Schleifen sind meist ein Irrweg. Du hast eine große Schleife: loop. BlinkWithoutDelay solltest Du Dir nicht nur anschauen, sondern verstehen. Dabei können Dir die "Nachtwächtererklärung" und auch Beiträge in "Tutorials und Literatur" beim Verständnis helfen. Interrupts solltest Du weiter nach hinten verschieben, wenn Du die nötigen Kenntnisse dafür hast. Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
22.12.2019, 18:46
Beitrag #5
|
|||
|
|||
RE: Loop-Teil mit Interrupt für bestimmte Zeit stoppen
(22.12.2019 16:56)Alter Fritz schrieb: Ich versuche zunächst die Basics zu erlernen..... Kleiner Tipp am Rande! Nutze die Automatische Formatierung in der Arduino IDE. Werkzeuge -> Automatische Formatierung oder Strg+T Gruß Fips Gruß Fips Meine Esp8266 & ESP32 Projekte |
|||
22.12.2019, 21:58
Beitrag #6
|
|||
|
|||
RE: Loop-Teil mit Interrupt für bestimmte Zeit stoppen | |||
22.12.2019, 22:10
(Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2019 22:24 von Franz54.)
Beitrag #7
|
|||
|
|||
RE: Loop-Teil mit Interrupt für bestimmte Zeit stoppen
Wenn du eine Ausführung stoppen willst, oder auch alles was im Loop läuft, stoppen willst, dann mache das, indem du eine Taste drückst, die wird erkannt, und du sagte einem Merker, dass er jetzt statt "0" auf "1" gehen soll. Den Merker fragst ganz am Anfang des Loops ab, und daraufhin wird alles was nicht mehr laufen soll übersprungen, weil der Merker auf 1 ist.
Also oben im Loop eine if abfrage ob der Merker auf 0 ist, wenn ja laufe alles ganz normal durch, wenn aber der Merker auf 1 ist, überspringe den ganzen if Abfrage Bereich. Wenn die Tastenabfrage nicht in diesem if Abfragebereich ist, kannst du wieder die Taste drücken und sorgst damit dafür, dass der Merker wieder auf 0 geht. Oben in der if Abfrage ist dann der Merker wieder auf 0 also werden alle Bereiche im if Abfragebereich wieder durchlaufen und somit läuft das Programm wieder. Du kannst auch eine Zeitabfrage einbauen mit Millis. Wenn der Merker 1 ist, wird die Zeit gestartet, in der Zeit wird der if Bereich wieder übersprungen, weil der Merker auf 1 ist, wenn dann die Zeit abgelaufen ist, wird automatisch der Merker auf 0 gestellt, und die Programmteile im If Abfrage Bereich werden wieder bedient. Du kannst es auf Zeit auch mit nem Delay(Zeit in ms) stoppen. Dann macht das Programm auch überhaupt nichts mehr solange wie eben diese delay Zeit ist. delay(60000) ist eine Minute (60000ms) totale Pause. Aber man will ja in der Regel, dass die CPU schon noch auf ihren Herrn hört. In der delay Zeit ist aber wirklich Pause. Da macht die CPU dann wirklich nichts mehr. Deshalb ist das in der Regel die schlechteste Option. Den Loop stoppen kannst du natürlich auch. Einfach mit dem Hammer auf den Arduino hauen, und alles stoppt, das ist noch intensiver wie die delay Pause ![]() https://www.youtube.com/watch?v=Fnzn85oWM_Q Hier was zum Thema Deutsche Politik ![]() Und hier zum Thema richtige Politik ![]() |
|||
23.12.2019, 09:16
(Dieser Beitrag wurde zuletzt bearbeitet: 23.12.2019 09:17 von MicroBahner.)
Beitrag #8
|
|||
|
|||
RE: Loop-Teil mit Interrupt für bestimmte Zeit stoppen
(22.12.2019 16:56)Alter Fritz schrieb: Ich versuche zunächst die Basics zu erlernen, um dann später einige Projekte zu realisieren. Im Augenblick probiere ich gerade die INTERRUPTs zu verstehen.Ich würde mal sagen, das widerspricht sich. Die Interrupts gehören ganz gewiss nicht zu den Basics und werden von vielen Einsteigern falsch eingeschätzt und falsch eingesetzt. Die braucht man im Sketch eigentlich nur sehr selten und in wenigen speziellen Fällen. Für den Einstieg in den Arduino solltest Du die jetzt einfach mal vergessen. Viel wichtiger ist es, blockierungsfrei (ohne delay() ) programmieren zu lernen. Da hast Du ja schon ein paar Tips bekommen. Ich persönlich mag die direkten millis()-Abfragen im Sketch nicht so sehr, und verwende da lieber etwas 'handlichers' wie den EggTimer in meinen MobaTools. Aber das ist Geschmacksache - das Grundprinzip ist immer dasselbe: Du darfst den loop() nicht anhalten, sondern musst im loop die Teile, die Du gerade nicht ausführen willst, überspringen. Gruß, Franz-Peter |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste