Ich habe da mal ne Frage zu Interrupts. Ich habe ein Programm, welches in einer Unterfunktion durchläuft.
Wenn ich nun einen Taster betätige, der ein Interrupt ausführt, möchte ich, dass das Programm die Unterfunktion verlässt und in das Hauptprogramm zurückkehrt.
Ich weiß, normalweise wird das Programm nach dem Interrupt an der gleichen Stelle ausgeführt, wo das Interrupt eingesetzt hat.
Habe aber gelesen, dass man den Task auch wechseln kann.
Grundsätzlich hat ein Arduino kein Betriebssystem und keine Tasks, sondern die loop() Funktion.
Die sollte so schnell sein, dass sie nur einen Moment dauert und dafür sofort wieder dran kommt.
Ein "Moment" ist von variabler Länge und kann physikalisch wenige µs bis zu mehreren ms dauern, je nach dem was für Reaktionszeiten erforderlich sind.
Die loop Funktion kann für schnelles Erfassen von Ereignissen kurzeitig durch eine Interrupt-Routine unterbrochen werden. Diese Interrupt Routine selbst kann nicht mehr unterbrochen werden und muss deshalb sehr kurz sein. Darf also ihrerseits keine Unterfunktionen aufrufen, von denen man nicht weiss, was sie machen. ( Serial.print ist z.B. verboten )
Handbetätigte Taster sind jedenfalls seeehr langsame Anforderungen, die üblicherweise im Millisekundenbereich prellen und dann viele Millisekunden lang den gleichen Zustand haben.
Natürlich wurde für Arduino schon viel erfunden, u.a. auch Task Scheduler und so. Das zu verwendenwird dich aber in die Irre führen.
Schreib lieber deine Unterfunktion so um, dass sie keine Schleifen enthält und nicht auf irgendwas wartet. Dann braucht sie auch nicht durch einen Taster unterbrochen werden.
für mich klingt das anders. Er hat 2 oder mehr Aufgaben in der loop die je nach Tastendruck durchlaufen werden sollen. Ohne selbstständige Rückkehr in was anderes. Erst auf Tastendruck hin.
Dazu braucht man wie gesagt keine echten Interrupts. Einfach die entprellten Taster ständig abfragen, letzten Tasterdruck merken und je nachdem die gewünschte Aufgabe (Funktionen) abarbeiten lassen und warten bis sich der Zustand der Taster ändert.
ganz ehrlich, ich kann das bald nicht mehr hören. Weil es irgendwo immer ein endlicher Automat ist, egal was man programmiert. Es ist eine Ablaufsteuerung. Wird immer wieder und wieder durchlaufen.
Bei Ebay gibts Kristallglaskugeln.
Die sind aber eher passiv.
Habe schon ein paar ausprobiert, aus meiner Sicht nicht empfehlenswert.
Es sei denn man braucht einen Briefbeschwerer, oder so....
Du hast eine sprechende Kristallkugel?
Sprechen, schreien, aufblitzen, vibrieren.....
Gong, Orchester, Trompete.... je nachdem....
combie:
Meine Glaskugel schreit mal wieder: "Endlicher Automat!"
Wenn man vernünftig, nicht blockierend und strukturiert programmiert, sind viele Anwendungen auf dem Arduino ein "Endlicher Automat", die meisten wissen nur nicht, dass das so heisst.