Chrome Serial API, 2. Teil

Seite 2: Mehr Kontrolle

Inhaltsverzeichnis

Als nächstes gilt es aber, Daten an den Arduino zu senden, um die RGB-LED und den Lautsprecher zu kontrollieren. Dazu muss die Software auf dem Arduino erweitert werden, denn bisher gibt sie nur Werte aus. Ab sofort muss sie auch Kommandos empfangen und verarbeiten können.

Das Programm EsploraController.ino ist eine konsequente Weiterentwicklung der ersten Version. Das heißt, es gibt weiterhin kontinuierlich alle Sensor-Daten auf der seriellen Schnittstelle aus. Darüber hinaus ermittelt es mit der Funktion parseCommand(), ob ein Kommando über die serielle Schnittstelle eingegangen ist.

Mehr Infos
include <Esplora.h>

void setup() {
while (!Serial);
Serial.begin(9600);
}

void loop() {
if (Serial.available())
parseCommand();
printSensorData();
delay(200);
}

void parseCommand() {
char cmd = Serial.read();
switch (cmd) {
case 'R': setRed(); break;
case 'G': setGreen(); break;
case 'B': setBlue(); break;
case 'T': setTone(); break;
}
}

void printSensorData() {
Serial.print(Esplora.readButton(SWITCH_1));
Serial.print(',');
Serial.print(Esplora.readButton(SWITCH_2));
Serial.print(',');
Serial.print(Esplora.readButton(SWITCH_3));
Serial.print(',');
Serial.print(Esplora.readButton(SWITCH_4));
Serial.print(',');
Serial.print(Esplora.readSlider());
Serial.print(',');
Serial.print(Esplora.readLightSensor());
Serial.print(',');
Serial.print(Esplora.readTemperature(DEGREES_C));
Serial.print(',');
Serial.print(Esplora.readMicrophone());
Serial.print(',');
Serial.print(Esplora.readJoystickSwitch());
Serial.print(',');
Serial.print(Esplora.readJoystickX());
Serial.print(',');
Serial.print(Esplora.readJoystickY());
Serial.print(',');
Serial.print(Esplora.readAccelerometer(X_AXIS));
Serial.print(',');
Serial.print(Esplora.readAccelerometer(Y_AXIS));
Serial.print(',');
Serial.print(Esplora.readAccelerometer(Z_AXIS));
Serial.println();
}

void setRed() {
Esplora.writeRed(Serial.parseInt());
}

void setGreen() {
Esplora.writeGreen(Serial.parseInt());
}

void setBlue() {
Esplora.writeBlue(Serial.parseInt());
}

void setTone() {
Esplora.tone(Serial.parseInt());
}


Unterstützt werden die Kommandos R, G, B und T. Alle vier Befehle erwarten zusätzlich noch einen ganzzahligen Wert. Die ersten drei setzen den Rot-, Grün- beziehungsweise Blau-Anteil der RGB-LED und der T-Befehl setzt die Frequenz des Tons, den der Lautsprecher ausgeben soll. Beispielsweise führt T440 zur Ausgabe eines Tons mit 440Hz und T0 schaltet den Ton aus. Die Anweisungen R255, G255 und B255 lassen die LED weiß leuchten.

Umgesetzt werden die Kommandos mit den Funktionen setRed(), setGreen(), setBlue() und setTone(), die ihre Arbeit allesamt an die Esplora-Bibliothek delegieren. Es ist zu beachten, dass dies nicht die effizienteste Art ist, den Esplora zu kontrollieren, denn zum Setzen der LED-Farbe wird dreimal auf die serielle Schnittstelle zugegriffen. Eine sinnvolle Erweiterung wäre also ein Kommando, das alle drei Farbanteile auf einmal liest. Zu Demonstrationszwecken reicht es aber allemal.