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"