Benutzer-Werkzeuge

Webseiten-Werkzeuge


skript:interrupts

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
skript:interrupts [2018/10/02 19:28]
d.golovko [2.3. Aufgabe: ein Katze-Maus-Spiel]
skript:interrupts [2021/01/27 19:02] (aktuell)
d.golovko [1. Interrupts in Arduino]
Zeile 3: Zeile 3:
  
 Hier werden zwei ähnliche Konzepte bei Arduino und Processing behandelt und jeweils eine Aufgabe gestellt. Ihr könnt sie aber auch getrennt voneinander lesen / lösen. Hier werden zwei ähnliche Konzepte bei Arduino und Processing behandelt und jeweils eine Aufgabe gestellt. Ihr könnt sie aber auch getrennt voneinander lesen / lösen.
 +
 +{{:​skript:​arduino-logo.png?​100}}
  
 =====1. Interrupts in Arduino===== =====1. Interrupts in Arduino=====
Zeile 8: Zeile 10:
 Manchmal muss ein Teil des Programms ausgeführt werden, sobald ein extermes (nicht vom Programm selbst gesteuertes) Erreignis passiert, z.B. wenn ein Knopf gedruckt wird.  Manchmal muss ein Teil des Programms ausgeführt werden, sobald ein extermes (nicht vom Programm selbst gesteuertes) Erreignis passiert, z.B. wenn ein Knopf gedruckt wird. 
  
-In Arduino gibt es für solche Fälle die Funktion [[https://​www.arduino.cc/​reference/​en/​language/​functions/​external-interrupts/​attachinterrupt/​|''​attachInterrupt()''​]]. Diese Funktion ​horscht ​auf ein Signal auf einem bestimmten Pin und, fallls ​das Signal detektiert wurde, ​führt ​den für diesen Fall vorgesehenen Code aus. Die Interrupts sind also eine der drei Möglichkeiten in Arduino, die Ausführung des Code in der Zeit zu steuern, neben [[https://​www.arduino.cc/​reference/​en/​language/​functions/​time/​delay/​|''​delay()''​]] und [[https://​www.arduino.cc/​reference/​en/​language/​functions/​time/​millis/​|''​millis()''​]]. ​ Der Vorteil von Interrupts ist, dass sie im Gegensatz zu ständigen Abfragen in ''​loop()''​ Resourcen sparen und vermeiden, dass das Signal verloren geht, wenn das Hauptprogramm in ''​loop()''​ gerade mit anderen Aufgaben beschäftigt ist. +In Arduino gibt es für solche Fälle die Funktion [[https://​www.arduino.cc/​reference/​en/​language/​functions/​external-interrupts/​attachinterrupt/​|''​attachInterrupt()''​]]. Diese Funktion ​horcht ​auf ein Signal auf einem bestimmten Pin und führtfalls das Signal detektiert wurde, den für diesen Fall vorgesehenen Code aus. Die Interrupts sind also eine der drei Möglichkeiten in Arduino, die Ausführung des Code in der Zeit zu steuern, neben [[https://​www.arduino.cc/​reference/​en/​language/​functions/​time/​delay/​|''​delay()''​]] und [[https://​www.arduino.cc/​reference/​en/​language/​functions/​time/​millis/​|''​millis()''​]]. ​ Der Vorteil von Interrupts ist, dass sie im Gegensatz zu ständigen Abfragen in ''​loop()''​ Resourcen sparen und vermeiden, dass das Signal verloren geht, wenn das Hauptprogramm in ''​loop()''​ gerade mit anderen Aufgaben beschäftigt ist. 
  
-===== Interrupts und Listeners ===== 
- 
-Hier werden zwei ähnliche Konzepte bei Arduino und Processing behandelt und jeweils eine Aufgabe gestellt. Ihr könnt sie aber auch getrennt voneinander lesen / lösen. 
- 
-{{:​skript:​arduino-logo.png?​100}} 
- 
- 
-=====1. Interrupts in Arduino===== 
- 
-Manchmal muss ein Teil des Programms ausgeführt werden, sobald ein extermes (nicht vom Programm selbst gesteuertes) Erreignis passiert, z.B. wenn ein Knopf gedruckt wird.  
  
 === 1.1. Erkennen des Knopfdrucks === === 1.1. Erkennen des Knopfdrucks ===
Zeile 63: Zeile 55:
  ​Serial.println("​loop() Start"​);​  ​Serial.println("​loop() Start"​);​
  ​delay(5000);​  ​delay(5000);​
- ​Serial.println("​loop() Ende"​);​Diese Seite beinhaltet drei Aufgaben: eine zu Arduino-Interrupts (s. den Punkt 1.3.) und zwei zu Listeners in Processing.  + ​Serial.println("​loop() Ende"​);​
  ​Serial.println();​  ​Serial.println();​
 } }
Zeile 78: Zeile 69:
 Schreibt ein Programm, welches auf Knopfdruck die eingebaute LED (''​LED_BUILTIN''​) anschaltet und nach 5 Sekunden wieder ausschaltet. Verwendet dabei Interrupts und ''​millis()''​. ​ Schreibt ein Programm, welches auf Knopfdruck die eingebaute LED (''​LED_BUILTIN''​) anschaltet und nach 5 Sekunden wieder ausschaltet. Verwendet dabei Interrupts und ''​millis()''​. ​
  
-<​hidden ​Eures Ergebnis könnt ihr mit dieser Musterlösung vergleichen.>​+<​hidden ​Euer Ergebnis könnt ihr mit dieser Musterlösung vergleichen.>​
 <code cpp> <code cpp>
 unsigned long timeButtonClick;​ // counts time since last button click unsigned long timeButtonClick;​ // counts time since last button click
Zeile 252: Zeile 243:
 ====2.4. Aussetzen von ''​draw()''​===== ====2.4. Aussetzen von ''​draw()''​=====
  
-Nun wollen wir dem Spieler klar machen, wenn das Spielziel erreicht ist. Wenn die “Katze” die “Maus” eingeholt hat, soll das Spiel anhalten und der Bildschirm rot werden. Dafür müssen wir ''​draw()''​ “ausschalten”. Das kann mit der Methode noLoop() gemacht werden.  ​+Nun wollen wir dem Spieler klar machen, wenn das Spielziel erreicht ist. Wenn die “Katze” die “Maus” eingeholt hat, soll das Spiel anhalten und der Bildschirm rot werden. Dafür müssen wir ''​draw()''​ “ausschalten”. Das kann mit der Methode ​''​noLoop()'' ​gemacht werden.  ​
  
 <figure label> <figure label>
Zeile 291: Zeile 282:
 } }
  
 +// Reagiert auf Tastaturpfeile
 void keyPressed() { void keyPressed() {
   if (keyCode==RIGHT) {   if (keyCode==RIGHT) {
Zeile 303: Zeile 295:
   if (abs(catX-ratX) < CAT_SIZE/​2.0 + RAT_SIZE/​2.0 && abs(catY-ratY) < CAT_SIZE/​2.0 + RAT_SIZE/​2.0) {   if (abs(catX-ratX) < CAT_SIZE/​2.0 + RAT_SIZE/​2.0 && abs(catY-ratY) < CAT_SIZE/​2.0 + RAT_SIZE/​2.0) {
     // wenn die Katze die Maus gefangen hat     // wenn die Katze die Maus gefangen hat
 +    background(255,​ 0, 0); // Mach den Hintergrund rot
 +    drawEllipse();​
     noLoop(); // Stopp das Spiel     noLoop(); // Stopp das Spiel
-    background(255,​ 0, 0); 
   }   }
-  drawEllipse();​ 
 } }
  
skript/interrupts.1538501322.txt.gz · Zuletzt geändert: 2018/10/02 19:28 von d.golovko