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. Experis GmbH, Berlin
  2. Deutsche Bundesbank, München
  3. AFRA GmbH, Erlangen, Forchheim
  4. Robert Bosch GmbH, Abstatt


Anzeige
Blu-ray-Angebote
  1. 16,99€ (ohne Prime bzw. unter 29€ Einkauf + 3€ Versand)
  2. (u. a. Warcraft Blu-ray 9,29€, Jack Reacher Blu-ray 6,29€, Forrest Gump 6,29€, Der Soldat...
  3. (u. a. The Revenant, Batman v Superman, James Bond Spectre, Legend of Tarzan)

Folgen Sie uns
       


  1. HP

    Im Envy 13 steckt eine Geforce MX150

  2. Quantencomputer

    Nano-Kühlung für Qubits

  3. Rockstar Games

    Red Dead Redemption 2 auf Frühjahr 2018 verschoben

  4. Software-Update

    Tesla-Autopilot 2.0 soll ab Juni "butterweich" fahren

  5. Gratis-Reparaturprogramm

    Apple repariert Grafikfehler älterer Macbook Pro nicht mehr

  6. Amazon Channels

    Prime Video erhält Pay-TV-Plattform mit Live-Fernsehen

  7. Bayerischer Rundfunk

    Fernsehsender wollen über 5G ausstrahlen

  8. Kupfer

    Nokia hält Terabit DSL für überflüssig

  9. Kryptowährung

    Bitcoin notiert auf neuem Rekordhoch

  10. Facebook

    Dokumente zum Umgang mit Sex- und Gewaltinhalten geleakt



Haben wir etwas übersehen?

E-Mail an news@golem.de


Anzeige
3D-Druck bei der Bahn: Mal eben einen Kleiderhaken für 80 Euro drucken
3D-Druck bei der Bahn
Mal eben einen Kleiderhaken für 80 Euro drucken
  1. Bahnchef Richard Lutz Künftig "kein Ticket mehr für die Bahn" notwendig
  2. Flatrate Öffentliches Fahrradleihen kostet 50 Euro im Jahr
  3. Nextbike Berlins neues Fahrradverleihsystem startet

Google I/O: Google verzückt die Entwickler
Google I/O
Google verzückt die Entwickler
  1. Neue Version im Hands On Android TV bekommt eine vernünftige Kanalübersicht
  2. Play Store Google nimmt sich Apps mit schlechten Bewertungen vor
  3. Daydream Standalone-Headsets auf Preisniveau von Vive und Oculus Rift

Panasonic Lumix GH5 im Test: Die Kamera, auf die wir gewartet haben
Panasonic Lumix GH5 im Test
Die Kamera, auf die wir gewartet haben
  1. Die Woche im Video Scharfes Video, spartanisches Windows, spaßige Switch

  1. Re: Wie groß die Auswahl wohl ist

    ip (Golem.de) | 11:10

  2. Re: Realitätsflucht

    blauerninja | 11:09

  3. Re: Deutsche wollen das nicht

    My1 | 11:07

  4. Live-Sport

    GebrateneTaube | 11:07

  5. Re: Pay to Win?

    ufo70 | 11:04


  1. 11:12

  2. 09:55

  3. 09:44

  4. 07:29

  5. 07:15

  6. 00:01

  7. 18:45

  8. 16:35


  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