Bei meiner ersten Zugerkennung hatte jedes Gleis im Schattenbahnhof eine eigene Lesestelle benötigt um die Loknummer zu erkennen und zu speichern.
Aber es geht auch anders wenn man als  Bedingungen voraus setzt, daß jeder Zug sein festes Abstellgleis hat, auf das er spätestens nach Betriebsende dorthin zurück kehrt
 
Der Decoder hat drei Funktionen:
1. er schreibt die gespeicherten Lokadressen beim Programmstart auf den Sx-Bus
2. er kommuniziert mit externen Geräten über die UART-Schnittstelle.
3. er stellt die Weichen entsprechend der gewählten Fahrstraße über den Sx-Bus
 
Der Decoder kann mit allen Geräten die eine Schnittstelle besitzen kommunizieren.
- ESP8266
- RaspberryPi
 
3. Interface:
Hierbei handel es sich nicht um ein gewöhnliches Interface, bei dem einfach nur Daten auf den SxBus geschrieben bzw von diesem gelesen werden.
Dieses Interface arbeitet entsprechend den empfangenen Kommandos ganze Befehlsketten selbständig ab und sendet nur ausgewählte Informationen zurück.
 
Das Datenformat sieht dabei wie folgt aus:
AdrXXXDataYYY
 
Die empfangenen Strings lösen folgende Aktionen aus:
AdrXXDataYYY steuert Loks/Weichen XX mit den Werten YYY
Adr109Data1 schaltet die Gleisspannung um
Adr230DataYY, setzt YY als aktive Lok1
Adr231DataYY, YY = 2 , Lok1 weiter blättern , YY = 1 Lok1 zurück blättern
Adr232DataYY, YY = 2 , Lok1 schneller , YY = 1 Lok1 langsamer
Adr255DataYY löst die Fahrstrasse YY aus.
Hierbei werden bis zu 8 Weichen nacheinander geschaltet (siehe links unter Punkt2).
Ist eine Lokadresse mit dieser Fahrstraße verknüpft wird diese im Handregler als Lok übernommen und kann gesteuert werden.
 
Im Gegenzug werden Strings zurück gesendet, wenn sich in gewissen Adressen die Daten auf dem Sx-Bus verändern:
Adr109DataY
Y = Gleisspannung
AdrXXDataYYY
XX = 40, 50, 60 = Gleisbelegtmelder
YYY = Dateninhalt der Adresse
Adr230DataYY
YY = aktive Lok1
Adr231DataYY
YY = 1 runter scrollen ; YY = 2 hoch scrollen
Adr232DataYY
YY = 1 Geschwindigkeit verringern ; YY = 2 Geschwindigkeit erhöhen
Adr255DataYY
YY = die geschaltete Fahrstrasse
Desweiteren gibt es einige Spezialitäten:
Schaltet man die Gleisspannung das erste Mal ein werden die im EEprom gespeicherten Daten in die Adressen 41-49, 51-59 und 61-68 auf den Sx-Bus geschrieben (siehe links unter Punkt1).
1. Lokadressen:
Wenn nach dem Start zum ersten Mal die Gleisspannung eingeschaltet wird, werden aus dem EEprom die Loknummern geladen und in die Sx-Adressen des Schattenbahnhofs geschrieben und dadurch in dem Steuerungsprogramm automatisch angezeigt. Zum Steuern einer Lok kann der Gleisbelegtmelder angeclickt werden und der Fahrregler der Lok wird geöffnet. Ebenso funktioniert damit auch der automatische Betrieb nach Fahrplan ohne irgend etwas einstellen zu müssen.
 
Wenn das Programm auch die Anzeige der Fahrtrichtung unterstützt, muß zuvor die Fahrtrichtung der Lok mit abgespeichert werden. Dazu wird bei der Loknummer, wenn diese Tender voraus auf dem Gleis steht, Bit 8 gesetzt.
 
Die Programmierung der Lokadresssen geschieht nach bekanntem Muster:
 
Prog Taster drücken
es werden alle! Lokadressen auf den Sx-Bus geschrieben
Lokadressen einstellen/änder
Prog Taster drücken
Die Daten werden ins EEprom geschrieben.
2. Fahrstraßen:
Zusätzlich zur Ausgabe der Lokadressen können noch 20 Fahrstraßen mit bis zu 8 Weichen geschaltet werden. Diese Informationen liegen in einem Array direkt im Arduino und werden einmalig fix programmiert, da der Gleisplan sich ja nicht so einfach über Nacht ändert.
Buchsenleiste links
Arduino
I/O
Funktion
1
Vin
+12V
2
+5V
3
D1
Rx
4
D0
Tx
5
RST
6
GND
7
D2
Takt
8
D3
Schreiben H
9
D4
Lesen
10
D5
 
11
D6
Schreiben L
12
D7
EEprom Led
13
D8
 
14
D9
 
15
D10
 
16
D11
 
17
D12
Gleis Led
18
D13
Prog Led
19
3V3
20
GND
Zuletzt geändert am 04.03.2017
 
 
.
Buchsenleiste rechts
Arduino
I/O
Funktion
1
 
2
 
3
 
4
 
5
GND
 
6
100Ohm
 
7
A5
 
8
A4
 
9
A3
 
10
A2
 
11
 
 
12
A7
13
A6
Prog Taster
14
 
15
A1
 
16
GND
 
17
A0
 
18
100Ohm
 
19
+5V
 
20
GND
 
Belegung ab Version 3.2
(c) Frank Keil