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. über Hanseatisches Personalkontor München, Großraum München
  2. ADWEKO Consulting GmbH, deutschlandweit
  3. Hessischer Rundfunk, Frankfurt am Main
  4. BRUNATA Wärmemesser GmbH & Co. KG, München


Anzeige
Blu-ray-Angebote
  1. (u. a. Der Marsianer, The Hateful 8, Interstellar, Django Unchained, London Has Fallen, Olympus Has...
  2. 18,99€ (ohne Prime bzw. unter 29€-Einkaufswert zzgl. 3€ Versand)
  3. (u. a. Die Goonies, John Mick, Auf der Flucht, Last Man Standing)

Folgen Sie uns
       


  1. OLG München

    Sharehoster Uploaded.net haftet nicht für Nutzerinhalte

  2. Linux

    Kernel-Maintainer brauchen ein Manifest zum Arbeiten

  3. Micro Machines Word Series

    Kleine Autos in Kampfarenen

  4. Docsis 3.1

    Unitymedia bereitet erste Gigabit-Stadt vor

  5. Donald Trump

    Ein unsicherer Deal für die IT-Branche

  6. Apsara

    Ein Papierflieger wird zu Einweg-Lieferdrohne

  7. Angebliche Backdoor

    Kryptographen kritisieren Whatsapp-Bericht des Guardian

  8. Hyperloop

    Nur der Beste kommt in die Röhre

  9. HPE

    Unternehmen weltweit verfehlen IT-Sicherheitsziele

  10. Youtube

    360-Grad-Videos über Playstation VR verfügbar



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Begnadigung: Danke, Chelsea Manning!
Begnadigung
Danke, Chelsea Manning!
  1. Nach Begnadigung Mannings Assange weiter zu Auslieferung in die USA bereit
  2. Statt Begnadigung Snowdens Aufenthalt in Russland verlängert
  3. Whistleblowerin Obama begnadigt Chelsea Manning

Shield TV (2017) im Test: Nvidias sonderbare Neuauflage
Shield TV (2017) im Test
Nvidias sonderbare Neuauflage
  1. Wayland Google erstellt Gamepad-Support für Android in Chrome OS
  2. Android Nougat Nvidia bringt Experience Upgrade 5.0 für Shield TV
  3. Nvidia Das Shield TV wird kleiner und kommt mit mehr Zubehör

Nintendo Switch im Hands on: Die Rückkehr der Fuchtel-Ritter
Nintendo Switch im Hands on
Die Rückkehr der Fuchtel-Ritter
  1. Nintendo Vorerst keine Videostreaming-Apps auf Switch
  2. Arms angespielt Besser boxen ohne echte Arme
  3. Nintendo Switch Eltern bekommen totale Kontrolle per App

  1. Re: Eher Sorge statt Angst

    Emulex | 17:04

  2. Re: Ping-Zeiten

    Gormenghast | 17:03

  3. Re: Die Armen ärmer machen

    HiddenX | 17:02

  4. Re: Ist das ein IMHO?

    teenriot* | 17:02

  5. Re: !! ACHTUNG !! Reflexartiger Aufschrei erfolgt...

    jo-1 | 17:00


  1. 17:06

  2. 16:49

  3. 16:22

  4. 15:31

  5. 15:03

  6. 13:35

  7. 12:45

  8. 12:03


  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