Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:nwt:arduino:lernbaustein2:interrupt:start [22.05.2023 19:00] – [Beispiel] sbel | faecher:nwt:arduino:lernbaustein2:interrupt:start [22.05.2023 19:27] (aktuell) – [Interrupts aktivieren/deaktivieren] sbel | ||
---|---|---|---|
Zeile 21: | Zeile 21: | ||
| | ||
- | ==== Beispiel ==== | + | ==== Beispiel |
{{ : | {{ : | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A1) === | ||
+ | |||
+ | Das Programm steuert ein Lauflicht mit 8 LEDs. Erläutere, wie die LEDs anschlossen sein müssen, damit das funktioniert. Welche Verhaltensweise wird durch den Einsatz des Interrupts erreicht? | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== ISR-Regeln ==== | ||
Für ISR gelten einige besondere Regeln: | Für ISR gelten einige besondere Regeln: | ||
- | * ISR sollten möglichst kurz gehalten werden. | + | * ISR sollten möglichst kurz gehalten werden |
* ISR können keine Argumente bekommen oder Rückgabewerte zurückgeben. Stattdessen werden - ausnahmsweise! - globale Variablen benutzt, um Daten zwischen Interrupt Service Routinen und dem Hauptprogramm zu tauschen. Damit die Variablen dabei korrekt geändert werden, sollten sie als '' | * ISR können keine Argumente bekommen oder Rückgabewerte zurückgeben. Stattdessen werden - ausnahmsweise! - globale Variablen benutzt, um Daten zwischen Interrupt Service Routinen und dem Hauptprogramm zu tauschen. Damit die Variablen dabei korrekt geändert werden, sollten sie als '' | ||
* Einige Funktionen verhalten sich in ISRs anders als gewohnt oder funktionieren gar nicht: | * Einige Funktionen verhalten sich in ISRs anders als gewohnt oder funktionieren gar nicht: | ||
Zeile 36: | Zeile 46: | ||
* '' | * '' | ||
+ | |||
+ | ==== Beispiel 2 ==== | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ---- | ||
+ | {{: | ||
+ | === (A2) === | ||
+ | |||
+ | * Was könnte man mit dem Programmgerüst bei geeigneter ausgestaltung der Funktion '' | ||
+ | * Wie könnte man ein solches Konstrukt einsetzen, um z.B. einen Linienfolger zu steuern oder schnell auf ein Hindernis zu reagieren? | ||
+ | |||
+ | ==== Interrupts aktivieren/ | ||
+ | |||
+ | Manchmal möchte man in bestimmten Sequenzen eines Programms eine Unterbrechung des Ablaufs durch Interrupts nicht zulassen, in anderen aber schon. Dazu kann man dem Arduino mitteilen, ob er auf Interrupts reagieren soll oder nicht: | ||
+ | |||
+ | |||
+ | noInterrupts(); | ||
+ | // anderer Code, der nicht unterbrochen werden soll | ||
+ | interrupts(); | ||
+ | |||
+ | |||
+ | Weitere Informationen findest du hier: https:// | ||
+ | |||
+ | ==== Material ==== | ||
+ | |||
+ | {{simplefilelist>: |