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:

Anzeige

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

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. AKDB, Regensburg
  2. Allianz Deutschland AG, Stuttgart
  3. DIEBOLD NIXDORF, Neu-Isenburg
  4. Techniker Krankenkasse, Hamburg


Anzeige
Spiele-Angebote
  1. (-50%) 9,99€
  2. 88,87€ (nur für Prime-Kunden)

Folgen Sie uns
       


  1. Wochenrückblick

    Früher war nicht alles besser

  2. Raumfahrt

    Falsch abgebogen wegen Eingabefehler

  3. Cloud

    AWS bringt den Appstore für Serverless-Software

  4. Free-to-Play-Strategie

    Total War Arena beginnt den Betabetrieb

  5. Funkchip

    US-Grenzbeamte können Pass-Signaturen nicht prüfen

  6. Telekom-Chef

    "Sorry! Da ist mir der Gaul durchgegangen"

  7. WD20SPZX

    Auch Western Digital bringt flache 2-TByte-HDD

  8. Metal Gear Survive im Test

    Himmelfahrtskommando ohne Solid Snake

  9. Cloud IoT Core

    Googles Cloud verwaltet weltweit IoT-Anlagen

  10. Schweden

    Netzbetreiber bietet 10 GBit/s für 45 Euro



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Sam's Journey im Test: Ein Kaufgrund für den C64
Sam's Journey im Test
Ein Kaufgrund für den C64
  1. THEC64 Mini C64-Emulator erscheint am 29. März in Deutschland
  2. Sam's Journey Neues Kaufspiel für C64 veröffentlicht

Age of Empires Definitive Edition Test: Trotz neuem Look zu rückständig
Age of Empires Definitive Edition Test
Trotz neuem Look zu rückständig
  1. Echtzeit-Strategie Definitive Edition von Age of Empires hat neuen Termin
  2. Matt Booty Mr. Minecraft wird neuer Spiele-Chef bei Microsoft
  3. Vorschau Spielejahr 2018 Zwischen Kuhstall und knallrümpfigen Krötern

Samsung C27HG70 im Test: Der 144-Hz-HDR-Quantum-Dot-Monitor
Samsung C27HG70 im Test
Der 144-Hz-HDR-Quantum-Dot-Monitor
  1. Volumendisplay US-Forscher lassen Projektion schweben wie in Star Wars
  2. Sieben Touchscreens Nissan Xmotion verwendet Koi als virtuellen Assistenten
  3. CJ791 Samsung stellt gekrümmten Thunderbolt-3-Monitor vor

  1. CAT S60 Android Updates

    henrikd@web.de | 09:12

  2. Re: nothern light...?

    b1n0ry | 09:03

  3. Re: Dringende Fragen

    Zibidaeus | 08:46

  4. Re: Das sagt eine Schlange auch

    Der Held vom... | 08:42

  5. Re: Grafikkarte aufrüsten

    umerali | 08:40


  1. 09:02

  2. 17:17

  3. 16:50

  4. 16:05

  5. 15:45

  6. 15:24

  7. 14:47

  8. 14:10


  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