Digitale Modellbahn

Bauteilesets wie dieses „Eleego Einsteiger Kit für UNO“ bringen zahlreiche Bauteile mit, die für den Einstieg in die Arduino-Program- mierung nützlich sind. Auch der Arduino UNO ist bereits enthalten.

Der Testaufbau mit den drei LEDs auf dem Steckbrett ist ganz einfach. Die Stromversorgung der LEDs erfolgt auf der rechten Seite über die Kontaktreihe mit der Beschriftung „+“.

void loop() { c_time=millis(); if (c_time>(ledrot+blinkrot)){ if (digitalRead(13)==HIGH) digitalWrite(13, LOW); else digitalWrite(13, HIGH); ledrot=c_time;} if (c_time>(ledgelb+blinkgelb)){ if (digitalRead(12)==HIGH) digitalWrite(12, LOW); else digitalWrite(12, HIGH); ledgelb=c_time;} if (c_time>(ledgruen+blinkgruen)){ if (digitalRead(11)==HIGH) digitalWrite(11, LOW); else digitalWrite(11, HIGH); ledgruen=c_time;}} In der Hauptschleife wird zunächst der Stand des Timers ausgelesen und zwischen- gespeichert. Anschließend wird für jede der drei LEDs überprüft, ob der aktuelle Zäh- lerstand höher ist als die Summe aus letz- tem Zählerstand und Blinkfrequenz. Ist dies der Fall, dann wird der Status des Aus- gangs gelesen und anschließend entspre- chend geändert. Bevor es weitergeht, wird der aktuelle Zählerstand in der jeweiligen LED-Variablen gespeichert. Das Programm könnte man für weitere LEDs erweitern. Nutzt man die analogen Ausgänge des Arduinos mit, lassen sich so bis zu 20 LEDs ansteuern, die völlig unab- hängig voneinander blinken. Das kann zum Beispiel für eine Hausbeleuchtung genutzt werden. Damit es nicht zu hektisch wird, sollte man dafür Werte von mehr als 10000 für die Leucht- und Pausenzeiten in den Programmcode einsetzen. Heiko Herholz

oder die negative Spannung bereitstellen. Das heißt, hier können entweder 5 Volt oder GND anliegen. Dementsprechend kann die Anode oder die Kathode der LED mit dem genutzten Digitalkontakt des Ar- duinos verbunden werden. Dies hat direkte Auswirkungen auf den Code: Wird der ge- wählte Kontakt mit der Anode verbunden, dann ist die LED eingeschaltet, wenn dieser Kontakt auf „HIGH“ gesetzt wird. Ist die Kathode verbunden, dann leuchtet die LED bei „LOW“. Grundsätzlich ist es für den Prozessor besser und im Allgemeinen üb- lich, die Kathode mit dem Arduino-Kon- takt zu verbinden. Der konkrete Aufbau erfolgt mit den LEDs und Widerständen auf einem Steck- brett. Die Verbindung der Elemente unter- einander und mit dem Arduino wird mit sogenannten „Jumper Wires“ hergestellt, die über passende Steckkontakte verfügen. SOFTWARE Wir wollen in diesem Beispiel drei LEDs nahezu unabhängig voneinander blinken lassen. In Teil 1 haben wir die Blinkfre- quenz mit der „delay“-Funktion eingestellt. Diese ist zwar recht einfach zu handhaben, hat aber einen Nachteil: In der Zeit, die wir als Parameter der Funktion mitgegeben ha- ben, macht der Prozessor nichts. Er wartet einfach nur die Zeit ab. Das ist natürlich un- praktisch, wenn es in der Zwischenzeit noch andere Dinge gibt, die der Prozessor erledigen könnte. Daher ist es sinnvoller, einen Timer als Zeitgeber einzusetzen, der einfach immer weiterläuft und in regelmä- ßigen Abständen nachsieht, ob eine Aktion

erforderlich ist. Mit den Funktionen mil- lis() und micros() lässt sich die seit dem Start des Arduinos vergangene Zeit abfra- gen. Für unsere Zwecke ist dies in Millise- kunden mit millis() sinnvoll. Der Anfang des Arduino-Programms sieht so aus: #define blinkrot 75

#define blinkgelb 500 #define blinkgruen 1200

unsigned long ledrot; unsigned long ledgruen; unsigned long ledgelb; unsigned long c_time;

Als Erstes werden Leucht- und Pausenzei- ten in Millisekunden definiert. Diese Werte kann man nach persönlichem Geschmack anpassen. Außerdem wird für jede LED eine Variable zum Speichern des letzten Stands des Timers benötigt. Die Variable c_time wird hilfsweise in der Programm- schleife eingesetzt. Weiter geht es mit der Setup()-Routine des Arduino-Programms: void setup() { ledrot=millis();

ledgruen=millis(); ledgelb=millis();

pinMode(13, OUTPUT); pinMode(12, OUTPUT); pinMode(11, OUTPUT); digitalWrite(13, LOW); digitalWrite(12, LOW); digitalWrite(11, LOW);}

Den Variablen für die einzelnen LEDs wird hier ein initialer Wert des Zeitgebers mit der millis()-Funktion zugewiesen. Außer- dem werden die drei verwendeten Ardui- no-Kontakte als Ausgänge initialisiert und die LEDs durch Setzen der Ausgänge auf LOW eingeschaltet.

DIGITALE MODELLBAHN 3|2025 81

Made with FlippingBook flipbook maker