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. Eucon GmbH, Münster
  2. BG-Phoenics GmbH, München
  3. Daimler AG, Leinfelden-Echterdingen
  4. MediaMarktSaturn IT Solutions, München


Anzeige
Blu-ray-Angebote
  1. (u. a. Platoon, Erbarmungslos, Training Day, Spaceballs, Einsame Entscheidung)
  2. (u. a. Legend of Tarzan, Mad Max: Fury Road, Der Hobbit, Gravity)
  3. (u. a. Unter dem Sand, The Neon Demon, Union Pacific)

Folgen Sie uns
       


  1. Super Mario Run

    Nintendo bleibt trotz Enttäuschung beim Bezahlmodell

  2. Samsung

    Galaxy Note 7 wird per Update endgültig lahmgelegt

  3. The Ringed City

    From Software zeigt Abschluss von Dark Souls 3 im Trailer

  4. Dieter Lauinger

    Minister fordert Gesetz gegen Hasskommentare noch vor Wahl

  5. Die Woche im Video

    Cebit wird heiß, Android wird neu, Aliens werden gesprächig

  6. Mobilfunkausrüster

    Welche Frequenzen für 5G in Deutschland diskutiert werden

  7. XMPP

    Bundesnetzagentur will hundert Jabber-Clients regulieren

  8. Synlight

    Wie der Wasserstoff aus dem Sonnenlicht kommen soll

  9. Pietsmiet

    "Alle Twitch-Kanäle sind kostenpflichtiger Rundfunk"

  10. Apache-Lizenz 2.0

    OpenSSL plant Lizenzwechsel an der Community vorbei



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Videostreaming im Zug: Maxdome umwirbt Bahnfahrer bei Tempo 230
Videostreaming im Zug
Maxdome umwirbt Bahnfahrer bei Tempo 230
  1. USA Google will Kabelfernsehen über Youtube streamen
  2. Verband DVD-Verleih in Deutschland geht wegen Netflix zurück
  3. Nintendo Vorerst keine Videostreaming-Apps auf Switch

Buch - Apple intern: "Die behandeln uns wie Sklaven"
Buch - Apple intern
"Die behandeln uns wie Sklaven"
  1. Übernahme Apple kauft iOS-Automatisierungs-Tool Workflow
  2. Instandsetzung Apple macht iPhone-Reparaturen teurer
  3. Earbuds mit Sensor Apple beantragt Patent auf biometrische Kopfhörer

Lithium-Akkus: Durchbruch verzweifelt gesucht
Lithium-Akkus
Durchbruch verzweifelt gesucht
  1. Super MCharge Smartphone-Akku in 20 Minuten voll geladen
  2. Brandgefahr HP ruft über 100.000 Notebook-Akkus zurück
  3. Brandgefahr Akku mit eingebautem Feuerlöscher

  1. Re: Einfach nicht zahlen!

    opodeldox | 18:35

  2. Re: "Ein Träumchen!"

    ArcherV | 18:33

  3. Re: Eigentlich doch genial

    crazypsycho | 18:31

  4. Re: Facebook und Apple und Google und...

    bombinho | 18:30

  5. Re: Betonköpfe

    crazypsycho | 18:29


  1. 15:20

  2. 14:13

  3. 12:52

  4. 12:39

  5. 09:03

  6. 17:45

  7. 17:32

  8. 17:11


  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