LEDs ansteuern

Bislang haben wir die Funktion setLeds() nur aufgerufen. Werfen wir einen näheren Blick darauf, obwohl es dort eigentlich nicht viel zu sehen gibt:

Stellenmarkt
  1. Informatiker/in, Wirtschaftsinformatiker/in o. ä. (w/m/d)
    DLR Deutsches Zentrum für Luft- und Raumfahrt e.V., Braunschweig
  2. Head of Product Softwaresolution therapie (m/w/d)
    MediFox GmbH, deutschlandweit
Detailsuche

  1. void setLeds() {
  2.  
  3. for(int i = 0; LEDS > i; i++) {
  4. send_cmd(
  5. i,
  6. script[currentline].pin[i].mode,
  7. script[currentline].pin[i].value
  8. );
  9. }
  10. }

Es werden die pin-Einträge der aktuellen Drehbuch-Zeile durchlaufen und dabei eine send_cmd-Funktion aufgerufen. Zur Erinnerung: Die tatsächliche Ansteuerung der LEDs übernimmt ein angeschlossener Arduino, send_cmd() ist dafür zuständig, dem Arduino zu sagen, wie er die LEDs ansteuern soll:

  1. void send_cmd(char pin, char mode, char value) {
  2. Wire.beginTransmission(23);
  3. char cmd[3];
  4.  
  5. cmd[0] = pin;
  6. cmd[1] = mode;
  7. cmd[2] = value;
  8.  
  9. Wire.write(cmd, 3);
  10. Wire.endTransmission();
  11.  
  12. }

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

Der Arduino ist als I2C-Slave am Touchboard angebunden. Über die Wire-Bibliothek können wir Kommandos über ein selbst definiertes Protokoll verschicken. Unser Protokoll ist sehr einfach aufgebaut: Wir können lediglich ein Kommandopaket, bestehend aus drei 8-bit-Werten, versenden. Der erste Wert ist die Nummer des anzusprechenden Pins (= LED), danach folgt die Angabe, was mit dieser LED passieren soll und zum Schluss ein Wert, dessen Interpretation vom Kommando abhängig ist.

Der Arduino als Leuchtsklave

Kommen wir damit zum Arduino. Er wurde am I2C-Bus als Slave angeschlossen, nimmt darüber selbstdefinierte Kommandos an und setzt diese entsprechend um. Das entsprechende Programm besteht also grob aus zwei Teilen: dem Empfang von I2C-Botschaften und der eigentlichen Logik zur LED-Ansteuerung. Das vollständige Sketch für den Arduino kann heruntergeladen werden.

Zentrales Verwaltungselement ist auch hier wieder ein Array, diesmal mit dem zusammengesetzten Datentyp Pin_Control, jeder Array-Eintrag repräsentiert einen GPIO-Pin des Arduino - und damit die entsprechend angebundene LED:

  1. struct Pin_Control {
  2. int pin;
  3. int mode;
  4. int value;
  5. int diff;
  6. };

Der Eintrag pin entspricht der jeweiligen Pin-Nummer. Der mode-Eintrag ist identisch mit den Varianten der LED-Ansteuerung beim Touchboard-Programm, wie auch value. Der diff-Wert dient zur internen Verwaltung.

Das Array wird über initPinControl für jeden GPIO-Pin initialisiert - standardmäßig ist jede LED aus (PC_MODE_LOW).

Dieses Array wird kontinuierlich über die Funktion processPins() ausgewertet. Sie durchläuft alle Einträge und ruft die entsprechenden Funktionen wie digitalWrite() und analogWrite() auf, um die Pins zu regulieren. Hier ausschnittsweise gezeigt:

  1. void processPins() {
  2. for(int i = 1; PINS >= i; i++) {
  3. switch(pins[i].mode) {
  4. ...
  5. case PC_MODE_PWM :
  6. analogWrite(pins[i].pin, pins[i].value);
  7. break;
  8. case PC_MODE_RISE :
  9. analogWrite(pins[i].pin, pins[i].value);
  10. if(255 == pins[i].value) {
  11. pins[i].mode = PC_MODE_HIGH;
  12. } else {
  13. pins[i].value = pins[i].value + pins[i].diff;
  14. }
  15. break;
  16. …
  17. }
  18. }
  19. }

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Musik abspielenKommandos empfangen 
  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
DSGVO
Amazon bekommt 746 Millionen Euro Datenschutz-Strafe

Die Strafe gegen Amazon ist die wohl größte jemals von einer europäischen Datenschutzbehörde verhängte Summe. Die Kläger freuen sich.

DSGVO: Amazon bekommt 746 Millionen Euro Datenschutz-Strafe
Artikel
  1. Blue Origin: Bezos-Beschwerde zu Mondlandefähre abgelehnt
    Blue Origin
    Bezos-Beschwerde zu Mondlandefähre abgelehnt

    Damit Blue Origin doch noch den Auftrag für eine Mondlandefähre bekommt, hat Jeff Bezos Geld geboten und sich offiziell beschwert. Es half nichts.

  2. Black Widow: Scarlett Johansson verklagt Disney
    Black Widow
    Scarlett Johansson verklagt Disney

    Scarlett Johansson hat wegen des Veröffentlichungsmodells von Black Widow Klage eingereicht. Disney nennt das Verhalten "herzlos".

  3. VW ID.4 im Test: Schön brav
    VW ID.4 im Test
    Schön brav

    Eine Rakete ist der ID.4 nicht. Dafür bietet das neue E-Auto von VW viel Platz, hält Spur und Geschwindigkeit - und einmal geht es sogar sportlich in die Kurve.
    Ein Test von Werner Pluta

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 • Viewsonic XG270QG (WQHD, 165 Hz) 549,99€ • Mega-Marken-Sparen bei MediaMarkt (u. a. Razer) • Saturn: 1 Produkt zahlen, 2 erhalten • Gigabyte X570 AORUS Master 278,98€ + 30€ Cashback • Alternate (u. a. AKRacing Core EX-Wide SE 248,99€) • MMOGA (u. a. Fallout 4 GOTY 9,99€) [Werbung]
    •  /