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. Geberit Verwaltungs GmbH, Pfullendorf
  2. Robert Bosch Power Tools GmbH, Leinfelden-Echterdingen
  3. über ORANGE Engineering, München
  4. Deutsche Post DHL Group, Bonn


Anzeige
Blu-ray-Angebote
  1. (u. a. Hobbit Trilogie Blu-ray 44,97€, Batman Dark Knight Trilogy Blu-ray 17,99€)
  2. 23,99€ (Vorbesteller-Preisgarantie)
  3. 5,99€ FSK 18

Folgen Sie uns
       


  1. Megaupload

    Dotcom droht bei Auslieferung volle Anklage in den USA

  2. PC-Markt

    Unternehmen geben deutschen PC-Käufen einen Schub

  3. Ungepatchte Sicherheitslücke

    Google legt sich erneut mit Microsoft an

  4. Torus

    CoreOS gibt weitere Eigenentwicklung auf

  5. Hololens

    Verbesserte AR-Brille soll nicht vor 2019 kommen

  6. Halo Wars 2 im Test

    Echtzeit-Strategie für Supersoldaten

  7. Autonome Systeme

    Microsoft stellt virtuelle Testplattform für Drohnen vor

  8. Limux

    Die tragische Geschichte eines Leuchtturm-Projekts

  9. Betriebssysteme

    Linux 4.10 beschleunigt und verbessert

  10. Supercomputer

    Der erste Exaflops-Rechner wird in China gebaut



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
Kernfusion: Angewandte Science-Fiction
Kernfusion
Angewandte Science-Fiction
  1. Kernfusion Wendelstein 7-X funktioniert nach Plan

MX Board Silent im Praxistest: Der viel zu teure Feldversuch von Cherry
MX Board Silent im Praxistest
Der viel zu teure Feldversuch von Cherry
  1. Patentantrag Apple denkt über Tastatur mit Siri-, Emoji- und Teilen-Taste nach
  2. Kanex Faltbare Bluetooth-Tastatur für mehrere Geräte gleichzeitig
  3. Surface Ergonomic Keyboard Microsofts Neuauflage der Mantarochen-Tastatur

Der große Ultra-HD-Blu-ray-Test (Teil 2): 4K-Hardware ist nichts für Anfänger
Der große Ultra-HD-Blu-ray-Test (Teil 2)
4K-Hardware ist nichts für Anfänger
  1. Der große Ultra-HD-Blu-ray-Test (Teil 1) 4K-Filme verzeihen keine Fehler
  2. Deutsche Verkaufszahlen Unberechtigter Jubel über die UHD-Blu-ray
  3. 4K Blu-ray Sonys erster UHD-Player kommt im Frühjahr 2017

  1. Re: Und was berechnen die wirklich?

    h1ght | 03:57

  2. Re: Wie viel Smog erzeugt der Smog-Berechner?

    h1ght | 03:51

  3. Re: Age of empires 4

    h1ght | 03:46

  4. Re: Ohne Telemetrie keine Erfolge

    h1ght | 03:38

  5. Re: Es führt kein Weg an Windows vorbei

    divStar | 03:26


  1. 18:33

  2. 17:38

  3. 16:38

  4. 16:27

  5. 15:23

  6. 14:00

  7. 13:12

  8. 12:07


  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