Lichtsteuerung eines RC Autos

Hier mal der Code für die automatische Lichtsteuerung eines RC Autos mit der Arduino_TPS. Die Steuerung steuert automatisch die Fahrbeleuchtung und die Blinker. Fährt man vorwärts geht die Fahrbeleuchtung an. Fährt man Rückwärts gehen zusätzlich die Rückfahrscheinwerfer an. Fährt man nach links oder rechts, werden die Blinker entsprechend gesteuert.

0x00: Mainloop.
0x0F: Unterroutine Fahrlicht
0x20: Unterroutine Blinker
 
0x00-0x01: Zunächst lade ich den RC Nullpunkt in das B Register.
0x02-0x03: Dann lese ich den RC Kanal für den ESC und sichere den auch in das E-Register
0x04: Aufruf der UNterroutine zur Anzeige des Fahrlichtes.
0x05-0x06: Ich lade den RC Nullpunkt in das B Register. (Die ROutine könnte das B REgister verändert haben)
0x07-0x08: Lesen des RC-Kanales für die Lenkung.
0x09: Aufruf der Unterroutine für die Blinker.
0x0A-0x0B: ein bisschen warten und dann zurück zum Anfang.
 
0x0F: Definition der Unterroutine Fahrlicht
0x10: Sprungadressen sind alle in Seite 1 (0x1#)
0x11: Beim Nullpunkt müssen alle Lichter aus sein. Also nächsten Befehl skippen.
0x12: Springe nach nicht null. (0x17)
0x13-0x16: Alle Lampen ausschalten.
0x17-0x18: RC nicht Nullpunkt, dann Fahrlicht ein.
0x19-0x1A: Fahren wir rückwärts?
0x1B: Nein, dann zurück
0x1C-0x1D: Rückfahrscheinwerfer ein
0x1E: Zurück.
 
0x20: Definition Unterroutine Blinken
0x21: Sprungadressen sind alle in Seite 2 (0x2#)
0x22: RC Wert zurückholen
0x23: RC Nullpunkt? (Kein Lenkausschlag)
0x24: Springe A
0x25-0x28: Kein Lenkausschlag also alle Blinker aus. Auch die Zähler zurücksetzen.
0x29: Zurück
 
0x2A: Sprungziele in Seite 3 (0x3#)
0x2B: Zähler erniedrigen, Zähler > 0 dann weiter bei 0x30
0x2C-0x2F: Zähler mit 15 neu laden.
0x30: Zählerstand nach A
0x31-0x37: Ermittlung ob Blinker an oder aus geschaltet werden soll. (Zählerstand > 8, dann BLinker ein), Ergebniss kommt nach F.
0x38: Wohin wird geblinkt? Rechts skip, Links nach 0x3F.
0x3A-0x3D: Blinker Rechts wie in F, Blinker links immer aus.
0x3E: Zurück
0x3F-0x42: Blinker Links wie in F, Blinker rechts immer aus.
0x43: Zurück
0x44: Programmende

So und nun das ganze Programm in echt.

Addr  BD   Bef    Data   Kommentar
0x00: 48   0X00   X000   A=#:A=8   ,"RC Nullpunkt"
0x01: 51   0X0X   000X   =A:B=A   ,""
0x02: 69   0XX0   X00X   A=:A=ADC.1   ,"Lesen des Throttles"
0x03: 5D   0X0X   XX0X   =A:E=A   ,"A sichern"
0x04: E1   XXX0   000X   Ret:Call 1   ,"Anzeige Fahrlicht"
0x05: 48   0X00   X000   A=#:A=8   ,""
0x06: 51   0X0X   000X   =A:B=A   ,""
0x07: 6A   0XX0   X0X0   A=:A=ADC.2   ,"Lesen Lenkung"
0x08: 5D   0X0X   XX0X   =A:E=A   ,"A sichern"
0x09: E2   XXX0   00X0   Ret:Call 2   ,"Anzeige Blinker"
0x0A: 25   00X0   0X0X   Delay:Delay 50ms   ,"Bisschen warten, damit's schön blinkt"
0x0B: 80   X000   0000   Seite:Seite 0   ,"Zurück zum Anfang"
0x0C: 90   X00X   0000   Sprung:Springe 0   ,""
0x0D: 00   0000   0000   0:NOP   ,""
0x0E: 00   0000   0000   0:NOP   ,""
0x0F: E8   XXX0   X000   Ret:Def 1   ,"Subroutine Licht "
0x10: 81   X000   000X   Seite:Seite 1   ,""
0x11: C3   XX00   00XX   Skip if:A=B   ,"Wenn Auto steht, Lampen aus"
0x12: 97   X00X   0XXX   Sprung:Springe 7   ,""
0x13: 40   0X00   0000   A=#:A=0   ,"Licht ausschalten"
0x14: 55   0X0X   0X0X   =A:Dout.1=A.0   ,"Fahrlicht ausschalten"
0x15: 56   0X0X   0XX0   =A:Dout.2=A.0   ,"Rückfahrlicht ausschalten"
0x16: E0   XXX0   0000   Ret:Return   ,""
0x17: 41   0X00   000X   A=#:A=1   ,"Fahrlicht ein"
0x18: 55   0X0X   0X0X   =A:Dout.1=A.0   ,""
0x19: 6D   0XX0   XX0X   A=:A=E   ,"A zurückholen"
0x1A: C2   XX00   00X0   Skip if:A<B   ,"Fahren wir Rückwärts?"
0x1B: E0   XXX0   0000   Ret:Return   ,""
0x1C: 41   0X00   000X   A=#:A=1   ,"Rücklicht einschalten"
0x1D: 56   0X0X   0XX0   =A:Dout.2=A.0   ,""
0x1E: E0   XXX0   0000   Ret:Return   ,""
0x1F: 00   0000   0000   0:NOP   ,""
0x20: E9   XXX0   X00X   Ret:Def 2   ,"Subroutine Blinken"
0x21: 82   X000   00X0   Seite:Seite 2   ,""
0x22: 6D   0XX0   XX0X   A=:A=E   ,""
0x23: C3   XX00   00XX   Skip if:A=B   ,"Kein Lenkausschlag?"
0x24: 9A   X00X   X0X0   Sprung:Springe A   ,""
0x25: 40   0X00   0000   A=#:A=0   ,"Kein Lenkausschlag, alle Blinker aus"
0x26: 57   0X0X   0XXX   =A:Dout.3=A.0   ,""
0x27: 58   0X0X   X000   =A:Dout.4=A.0   ,""
0x28: 52   0X0X   00X0   =A:C=A   ,"Und auch den Zähler zurücksetzen"
0x29: E0   XXX0   0000   Ret:Return   ,""
0x2A: 83   X000   00XX   Seite:Seite 3   ,"Alle Sprungziele liegen jetzt in Seite 3"
0x2B: A0   X0X0   0000   C*:C 0   ,"C > 0; Springe nach 30"
0x2C: 4F   0X00   XXXX   A=#:A=15   ,"Zähler neu laden"
0x2D: 52   0X0X   00X0   =A:C=A   ,""
0x2E: 00   0000   0000   0:NOP   ,""
0x2F: 00   0000   0000   0:NOP   ,""
0x30: 62   0XX0   00X0   A=:A=C   ,""
0x31: C1   XX00   000X   Skip if:A>B   ,"Zähler > 8, dann Blinker ein"
0x32: 95   X00X   0X0X   Sprung:Springe 5   ,""
0x33: 41   0X00   000X   A=#:A=1   ,"Blinker ein"
0x34: 96   X00X   0XX0   Sprung:Springe 6   ,""
0x35: 40   0X00   0000   A=#:A=0   ,"Blinker aus"
0x36: 5E   0X0X   XXX0   =A:F=A   ,"Status sichern"
0x37: 6D   0XX0   XX0X   A=:A=E   ,"Jetzt schauen wohin wir blinken müssen"
0x38: C1   XX00   000X   Skip if:A>B   ,"Rechtsausschlag?"
0x39: 9F   X00X   XXXX   Sprung:Springe F   ,""
0x3A: 6E   0XX0   XXX0   A=:A=F   ,""
0x3B: 57   0X0X   0XXX   =A:Dout.3=A.0   ,"Blinken rechts"
0x3C: 40   0X00   0000   A=#:A=0   ,""
0x3D: 58   0X0X   X000   =A:Dout.4=A.0   ,"Blinker links aus"
0x3E: E0   XXX0   0000   Ret:Return   ,""
0x3F: 6E   0XX0   XXX0   A=:A=F   ,""
0x40: 58   0X0X   X000   =A:Dout.4=A.0   ,"Blinken links"
0x41: 40   0X00   0000   A=#:A=0   ,""
0x42: 57   0X0X   0XXX   =A:Dout.3=A.0   ,"Blinker rechts aus"
0x43: E0   XXX0   0000   Ret:Return   ,""
0x44: FF   XXXX   XXXX   Byte:PrgEnd   ,"Ende des Programms"