Mikrocontroller für die Modellbahn

Für unsere Leser des Digitalmagazins 2026 stellen wir die Programmcodes zum Beitrag hier bereit. Diese können direkt kopiert und in die Entwicklungsumgebung Arduino IDE eingefügt und von dort aus kompiliert werden.
Hier der Code zum ersten Beispiel aus dem Beitrag:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const char* ziele[] = {
"Hersbruck r. d. Peg.",
"Wuerzburg\nueber Neustadt a.d.Aisch\nund Kitzingen",
"Neumarkt Opf.",
"Bamberg Oberfr."
};
const int anzahlZiele = 4; // hier die Anzahl der Einträge im Array „ziele“ eintragen
int aktuellesZiel = 0;
unsigned long letzteUmschaltung = 0;
const unsigned long intervall = 5000; // 5 Sekunden
void setup() {
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
for(;;); // Stop, falls Display nicht gefunden
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
}
void loop() {
unsigned long jetzt = millis();
if (jetzt - letzteUmschaltung >= intervall) {
letzteUmschaltung = jetzt;
aktuellesZiel = (aktuellesZiel + 1) % anzahlZiele; // nächstes Ziel
display.clearDisplay();
display.setCursor(0,0);
display.println(ziele[aktuellesZiel]);
display.display();
}
}
Nachfolgend nun das zweite Code-Beispiel, das mit dem Abschnitt ab „void loop“ ausgetauscht wird:
void loop() {
unsigned long jetzt = millis();
if (jetzt - letzteUmschaltung >= intervall) {
letzteUmschaltung = jetzt;
aktuellesZiel = (aktuellesZiel + 1) % anzahlZiele; // nächstes Ziel
display.clearDisplay();
display.setCursor(0,20);
display.println(ziele[aktuellesZiel]);
// --- Zusatztext bei Ziel 1 ---
if (aktuellesZiel == 0) {
display.setCursor(0,0);
display.println("5 min. spaeter");
}
else if (aktuellesZiel == 3) {
display.setCursor(0,0);
display.println("Heute Gleis 3 ")

