Abo
  • Services:
Anzeige
Das verkabelte Touchboard
Das verkabelte Touchboard (Bild: Fabian Hamacher/Golem.de)

Musik abspielen

Das eigentliche Programm ist nicht weiter kompliziert. In einer Schleife werden die Drehbuchzeilen abgearbeitet, und abhängig vom Zustand wird entweder eine MP3-Datei abgespielt oder auf eine Sensoreneingabe gewartet:

  1. void loop() {
  2.  
  3. if(STATE_TOUCH == loopState) {
  4. waitForTouch();
  5. } else {
  6. playMp3();
  7. }
  8.  
  9. }

Anzeige

Die playMp3()-Funktion ist dank der MP3-Bibliothek (SFEMP3Shield) bemerkenswert einfach:

  1. void playMp3() {
  2.  
  3. while(MP3player.isPlaying()) {}
  4.  
  5. MP3player.playTrack(script[currentline].file);
  6.  
  7. setLeds();
  8. delay(script[currentline].delay);
  9. incrementScript();
  10.  
  11. }

Am Anfang erfolgt eine Prüfung, ob bereits eine Datei abgespielt wird. Wenn ja, ist die weitere Programmausführung erst einmal blockiert. Wenn nicht beziehungsweise nicht mehr, wird die im Drehbuchskript vermerkte Datei abgespielt. Da das Abspielen der MP3-Datei im Hintergrund abläuft und die Programmausführung nicht blockiert, wird über setLeds() gleichzeitig der Zustand der LEDs entsprechend gesetzt. Zum Schluss wird noch gewartet, wenn das Drehbuch dies erzwingt, und danach die nächste Drehbuchzeile aktiviert.

Auf die Sensoren warten

Die waitForTouch()-Funktion ist etwas länger, aber nur wenig. Die verwendete Bibliothek MPR121 reduziert den Aufwand deutlich, die Berührungssensoren auszuwerten. Sie besteht aus zwei Teilen. Zuerst wird ermittelt, welche Sensoren berührt wurden, dann geprüft, ob die Berührungen die Bedingungen erfüllen, um zur nächsten Drehbuchzeile zu springen:

  1. void waitForTouch() {
  2.  
  3. byte touches = 0;
  4.  
  5. if(MPR121.touchStatusChanged()){
  6. MPR121.updateTouchData();
  7.  
  8. for(int i=0; ELECTRODES > i; i++){
  9. if(MPR121.isNewRelease(i)) {
  10. touches = touches | ceil(pow(2, i));
  11. }
  12.  
  13. }
  14. }
  15.  
  16. if(touches & script[currentline].touch) {
  17. setLeds();
  18. delay(script[currentline].delay);
  19. incrementScript();
  20. }
  21. }

Zuerst wird geprüft, ob überhaupt ein Sensorkontakt stattfand (touchStatusChanged), wenn ja, müssen wir die Sensordaten holen (updateTouchData).

In einer Schleife prüfen wir dann für jede der Sensorelektroden, ob eine Berührung vermerkt wurde. Ist das der Fall, wird in einem Bitfeld ein entsprechendes Bit gesetzt. Der entsprechende Code erscheint etwas merkwürdig: touches = touches | ceil(pow(2, i));

Wir nutzen dabei aus, dass die Nummer der Elektrode direkt mit der Position im Bitfeld korrespondiert, daher erhalten wir mit pow(2, <nummer>) eine Zahl, deren binäre Darstellung genau eine 1 an der entsprechenden Stelle im Bitfeld hat. Das ceil() ist notwendig, weil pow() eine Fließkommazahl liefert, wir aber eine Ganzzahl benötigen.

Das so erzeugte Bitfeld vergleichen wir mit der Bedingung in der aktuellen Drehbuch-Zeile. Ist sie erfüllt, werden auch hier die LEDs angesteuert und es wird zur nächsten Drehbuch-Zeile gewechselt.

 Mühsam nährt sich das EichhörnchenLEDs ansteuern 

eye home zur Startseite
McFarmar 13. Jan 2015

Finde ich auch super. Ein Kollege hat ein Kind das im richtigen Alter ist - ich glaube...

Konstantin... 13. Jan 2015

den ich persönlich lustiger finde. Man benötigt zwar einen PC dafür, wenn ich aber...



Anzeige

Stellenmarkt
  1. Daimler AG, Sindelfingen
  2. Rundfunk Berlin-Brandenburg (rbb), Potsdam, Berlin
  3. R&S Cybersecurity ipoque GmbH, Leipzig
  4. VSA GmbH, München


Anzeige
Top-Angebote
  1. 99,99€ + 5,99€ Versand (Vergleichspreis 130€)
  2. (u. a. Predator 2 und Predators für je 3€ und Fight Club für 2,96€+ jeweils 5€ FSK-18...
  3. (u. a. Mission Impossible 1-5 Box 16,97€ und Death Race 1-3 9,94€ + 5€ FSK-18-Versand)

Folgen Sie uns
       


  1. Energy Harvesting

    Biobrennstoffzelle erzeugt Strom aus Schweiß

  2. Neue Firmware

    Zwangsupdate für DJIs Spark-Drohne gegen Abstürze

  3. High Speed Rail

    Chinas Züge fahren bald wieder mit 350 km/h

  4. iPhone am Steuer

    Apple will an Autounfällen nicht schuld sein

  5. Filmfriend

    Kostenloses Videostreaming für Bibliothekskunden

  6. EMotion

    Fisker-Elektroauto soll in 9 Minuten Strom für 200 km laden

  7. Electronic Arts

    Hunde, Katzen und Weltraumschlachten

  8. Microsoft

    Age of Empires 4 angekündigt

  9. Google

    Android 8.0 heißt Oreo

  10. KI

    Musk und andere fordern Verbot von autonomen Kampfrobotern



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
LG 34UC89G im Test: Wenn G-Sync und 166 Hertz nicht genug sind
LG 34UC89G im Test
Wenn G-Sync und 166 Hertz nicht genug sind
  1. LG 43UD79-B LG bringt Monitor mit 42,5-Zoll-Panel für vier Signalquellen
  2. Gaming-Monitor Viewsonic XG 2530 im Test 240 Hertz, an die man sich gewöhnen kann
  3. SW271 Benq bringt HDR-Display mit 10-Bit-Panel

C64-Umbau mit dem Raspberry Pi: Die Wiedergeburt der Heimcomputer-Legende
C64-Umbau mit dem Raspberry Pi
Die Wiedergeburt der Heimcomputer-Legende

Ikea Trådfri im Test: Drahtlos (und sicher) auf Schwedisch
Ikea Trådfri im Test
Drahtlos (und sicher) auf Schwedisch
  1. Smarte Lampen Ikeas Trådfri wird kompatibel mit Echo, Home und Homekit
  2. Die Woche im Video Kündigungen, Kernaussagen und KI-Fahrer
  3. Augmented Reality Ikea will mit iOS 11 Wohnungen virtuell einrichten

  1. Re: Fuer mich als Linux-Gelegenheitsgamer...

    Ju9f0-21SC | 11:23

  2. Re: Sehr allumfassende Überschrift

    as (Golem.de) | 11:22

  3. Re: Und hier ist das nervige Problem

    pythoneer | 11:21

  4. Re: Schanghai???

    schap23 | 11:21

  5. Re: Wenn der Bauer...

    Tantalus | 11:21


  1. 11:23

  2. 10:58

  3. 10:21

  4. 09:52

  5. 09:02

  6. 07:49

  7. 07:23

  8. 07:06


  1. Themen
  2. A
  3. B
  4. C
  5. D
  6. E
  7. F
  8. G
  9. H
  10. I
  11. J
  12. K
  13. L
  14. M
  15. N
  16. O
  17. P
  18. Q
  19. R
  20. S
  21. T
  22. U
  23. V
  24. W
  25. X
  26. Y
  27. Z
  28. #
 
    •  / 
    Zum Artikel