Serieller Monitor

Example Sketch Code

Download Arduino IDE Sketch

Beschreibung

Wir werden die Möglichkeit einbauen die LEDs vom Computer aus über den seriellen Monitor zu steuern.

Code

Der Serielle Monitor

Ein „x“ schaltet alle LEDs aus. Eine beliebige Zahl von 0 – 7 schaltet die jeweilige LED ein, wobei 0 die LED ganz links ist und 7 die LED ganz rechts.

Beim Senden der Zahlen sollte die entsprechende LED aufleuchten und eine Bestätigungsnachricht von der Platine im seriellen Monitor wird ersichtlich:

Befehle

void setup()
{
pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
updateShiftRegister();
Serial.begin(9600);
while (! Serial); // Wait until Serial is ready
Serial.println("Enter LED Number 0 to 7 or 'x' to clear");
}

„Serial.begin(9600)“ leitet die serielle Kommunikation mit einer Baudrate von 9600 ein. Die Baudrate ist die Geschwindigkeit der Datenübertragung.

Die Zeile mit der „while“-Schleife wartet solange, bis eine serielle Verbindung zum Computer hergestellt ist und fährt dann fort. Ohne diesen Code könnte es passieren, dass die erste Nachricht zu früh gesendet und daher nicht empfangen wird.

Die letzte Zeile in der setup-Funktion sendet die „Begrüßungsnachricht“ aus, die wir später oben im seriellen Monitor sehen werden. Die ganze Steuerung der LEDs passiert in der loop-Funktion:

void loop()
{
if (Serial.available())
{
char ch = Serial.read();
if (ch >= '0' && ch <= '7') {
int led = ch - '0';
bitSet(leds, led);
updateShiftRegister();
Serial.print("Turned on LED ");
Serial.println(led);
} if (ch == 'x')
{
leds = 0; updateShiftRegister();
Serial.println("Cleared"); }
}
}

Serial.available() gibt true zurück, wenn Nachrichten über die serielle Verbindung empfangen wurden. Eingehende serielle Nachrichten werden in einem sogenannten „Buffer“ (= Puffer) gespeichert. Wenn dieser Buffer Nachrichten enthält, gibt Serial.available() true zurück. Wenn eine Nachricht empfangen wurde, kann man sie über diesen Befehl lesen:

char ch = Serial.read();

Die Funktion „Serial.read()“ liest das nächste Zeichen aus dem Buffer und entfernt es aus diesem. Hier wird dieses Zeichen gleichzeitig der Variable „ch“ zugewiesen. Die ch-Variable ist eine Variable des Typs „char“, was für Charakter bzw Zeichen steht. Eine char-Variable kann also genau ein Zeichen abspeichern.

Das if-Statement in der nächsten Zeile überprüft ob es sich um eine Zahl zwischen 0 und 7 handelt, indem es überprüft ob es sich um eine Zahl handelt, die größer oder gleich 0 und gleichzeitig kleiner oder gleich 7 ist.

Wenn über die Serielle Verbindung eine 0 empfangen, wird (weil 0-0 = 0) eine 0 in der led-Variable gespeichert. Bei einer 7, würde 7-0 = 7 in der Variable gespeichert. Da wir nun die Nummer der LED wissen, die angeschaltet werden soll, können wir den entsprechenden Bit in der leds-Variable setzen und das Schieberegister updaten.

bitSet(leds, led);
updateShiftRegister();

Die nächsten zwei Zeilen geben eine Bestätigungsnachricht an den Seriellen Monitor zurück.

Serial.print("Turned on LED ");
Serial.println(led);
if (ch == 'x')
{
leds = 0; updateShiftRegister();
Serial.println("Cleared");
}

Bei einem „x“ werden alle Bits der leds-Variable auf 0 gesetzt, das Schieberegister geupdatet und eine Bestätigungsnachricht geschickt, dass alle LEDs ausgeschaltet wurden.

Aufbau

Serieller Monitor