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:

Stellenmarkt
  1. PHP-Entwickler (w/m/d)
    Personalwerk Holding GmbH, Karben
  2. Backend Entwickler TYPO3 (w/m/d)
    DMK E-BUSINESS GmbH, Chemnitz, Berlin-Potsdam, Köln
Detailsuche

  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. }

Golem Akademie
  1. IT-Fachseminare der Golem Akademie
    Live-Workshops zu Schlüsselqualifikationen
  2. 1:1-Videocoaching mit Golem Shifoo
    Berufliche Herausforderungen meistern
  3. Online-Sprachkurse mit Golem & Gymglish
    Kurze Lektionen, die funktionieren
Weitere IT-Trainings

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.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Mühsam nährt sich das EichhörnchenLEDs ansteuern 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. 8
  10. 9
  11.  


Aktuell auf der Startseite von Golem.de
Apple
Macbook-Nutzer berichten über gesprungene Displays

Zahlreiche Besitzer von Macbooks mit M1-Chip berichten über plötzlich gesprungene Displays - Apple geht von Fremdverschulden aus.

Apple: Macbook-Nutzer berichten über gesprungene Displays
Artikel
  1. Gesetz tritt in Kraft: Die Uploadfilter sind da
    Gesetz tritt in Kraft
    Die Uploadfilter sind da

    Ab sofort haften große Plattformen für die Uploads ihrer Nutzer. Zu mehr Lizenzvereinbarungen hat das bei der Gema noch nicht geführt.
    Ein Bericht von Friedhelm Greis

  2. Mercedes-Benz: Daimler rechnet mit Abbau von Arbeitsplätzen durch E-Autos
    Mercedes-Benz
    Daimler rechnet mit Abbau von Arbeitsplätzen durch E-Autos

    Mehr Elektroautos bei Daimler bedeuten nach Ansicht der Chefetage weniger Arbeitsplätze. Grund sei der einfachere Einbau eines Elektromotors.

  3. VW, BMW, Daimler: Jedes sechste Elektroauto ist von deutschem Hersteller
    VW, BMW, Daimler
    Jedes sechste Elektroauto ist von deutschem Hersteller

    Das Elektroauto gewinnt an Fahrt bei den deutschen Herstellern und Autokäufern. Bei Angebot und Nachfrage dominiert China.

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...



Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Schnäppchen • Acer XB323UGP (WQHD, 170Hz) 580,43€ • Acer XV340CKP (UWQHD, 144 Hz) 465,78€ • Razer BlackShark V2 + Base Station V2 Chroma 94,98€ • Mega-Marken-Sparen bei MM • Saturn: 1 Produkt zahlen, 2 erhalten • Alternate (u. a. AKRacing Core EX-Wide SE 248,99€) • Fallout 4 GOTY 9,99€ [Werbung]
    •  /