Hi,
ja der alte Naubaddi lebt noch und bastelt mal wieder mit einer PCAXE, und natürlich mit Resten die so im Bastelkeller rumliegen.
Es fing alles ganz harmlos an weil das Wetter nicht so dolle war, also ist es wieder Bastelzeit.
Das erste Projekt war eine RC Hoverdisk aus Resten, das zweite Projekt ein RC-Dreirad aus Resten, bis hier ging es ohne die PICAXE . Als drittes Projekt kam dann MF1 (merkwürdiges Fahrzeug 1) auch aus Resten, auch eine RC Variante die etwas mehr können soll. Bei dem MF1 kommt dann auch eine PICAXE 14M2 ins Rennen die für ein Lauflicht und das Licht zuständig ist, es gibt viel Huhn, braten wir es an ähm zu tun.
Die PICAXE 14M2 verrichtet ihren Dienst recht gut, das vorliegende Programm nutzt Multitask (start1) für das Lauflicht weil sonst die Ansprechzeiten der RC-Signale zu groß sind. Dabei ist mir aufgefallen das der pause Befehl in bei Multitask anders arbeitet als ohne Multitask direkt in der RC-Schleife .
Das RC-Model:
Das RC-Modul:
Der Stromlaufplan:
Das Programm:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
; picaxe14m2 ; automatische Compilerauswahl für gedit
; Dateiname: Lauflicht-und-Licht.axe
; Funktion: Lauflicht mit 2x5 LEDs und Licht über einen RC-Kanal ein/aus schalten
; Datum: Start 22.08.2013, Stand 12.11.2019
; Von: Naubaddi
;
; PICAXE 14M2 Alle Pin Funktionen
;
; +---v---+
; +V |1 14| 0V
; RxD/I C.5 |2 13| B.0 O/TxD/hserout/DAC
; Touch/ADC/I/O C.4 |3 12| B.1 I/O/ADC/Touch/SRI/hserin
; I C.3 |4 11| B.2 I/O/ADC/Touch/pwm/tune/SRQ
; kb clk/hpwm A/pwm/I/O C.2 |5 10| B.3 I/O/ADC/Touch/hi2c scl
; kb data/hpwm B/I/O C.1 |6 9| B.4 I/O/ADC/Touch/pwm/hi2c sda
; hpwm C/pwm/Touch/ADC/I/O C.0 |7 8| B.5 I/O/ADC/Touch/hpwm D
; +-------+
;
symbol RC_Kanal = C.0 ; Eingang für einen Kanal vom Empfänger
symbol RC_Signal = w0 ; das Signal vom Empfänger (75-225)
symbol Mitte = b2 ; die Mittelstellung vom Sender
symbol Schaltpunkt = b3 ; Schaltpunkt plus/minus zu der Mittelstellung
let Schaltpunkt = 30 ; der Schaltpunkt
symbol Licht_vorne = C.1 ; Ausgang für das Licht vorne
symbol Licht_hinten = C.2 ; Ausgang für das Licht hinten
symbol Licht = b4 ; Variable für Licht ein/aus
let Licht = 0 ; Licht zuerst aus
;
symbol LED_max = b5 ; Variable für die max Anzahl LEDs
let LED_max = 5 ; max Anzahl LEDs
symbol LED = b6 ; ein Zähler für die LEDs am Ausgang
let LED = 0 ; mit LED am Ausgang 1 anfangen
symbol LR = b7 ; nach links oder nach rechts?
let LR = 1 ; 0 = links, 1 = rechts, zuerst nach rechts
symbol LED_ein = b8 ; LED Einzeit
let LED_ein = 100 ; LED x ms ein, 100 Millisekunden
symbol Lauflicht = b9 ; Lauflicht ein/aus
let Lauflicht = 0 ; Lauflicht zuerst aus
;
symbol LED_x = b10 ; Variable für LED x
let LED_x = 0 ; LED x ist erst mal 0
symbol P1 = b11 ; Pause 1, überblenden
let P1 = 18 ; Pause 1, 33 Millisekunden
symbol P2 = b12 ; Pause 2, überblenden
let P2 = 54 ; Pause 2, 99 Millisekunden
;
symbol dumm = b13 ; eine Variable für alles Mögliche
symbol KITT = b14 ; normales Lauflicht oder KITT Lauflicht
let KITT = 1 ; 0 = normal, 1 = KITT
;
suspend 1 ; Multitask für das Lauflicht stoppen
;
pause 1000 ; eine Pause für die RC-Elektrik
;
pulsin RC_Kanal, 1, Mitte ; die Mittelstellung übernehmen (ca. 150)
;
RC_Modul: ; Hauptschleife für das RC-Modul
;
pulsin RC_Kanal, 1, RC_Signal ; RC Signal übernehmen
dumm = Mitte + Schaltpunkt ; Mittelstellung + Schaltpunkt für Lauflicht ein/aus
;
if RC_Signal > dumm then ; gibt es ein RC Signal für Lauflicht ein/aus?
;
if Lauflicht = 0 then ; wenn das Lauflicht aus ist
Lauflicht = 1 ; Lauflicht auf ein setzen
LED = 0 ; mit LED am Ausgang 1 anfangen
resume 1 ; Multitask für das Lauflicht starten
else ; sonst
suspend 1 ; Multitask für das Lauflicht stoppen
Lauflicht = 0 ; Lauflicht auf aus setzen
low B.1 ; LED 5 und 6 aus
low B.2 ; LED 4 und 7 aus
low B.3 ; LED 3 und 8 aus
low B.4 ; LED 2 und 9 aus
low B.5 ; LED 1 und 10 aus
endif ; Ende von: Lauflicht_ein
;
do ; Warteschleife
pulsin RC_Kanal, 1, RC_Signal ; RC Signal übernehmen
loop until RC_Signal < dumm ; Ende von: do (Warteschleife)
;
endif ; Ende von: RC_Signal
;
pulsin RC_Kanal, 1, RC_Signal ; RC Signal übernehmen
dumm = Mitte - Schaltpunkt ; Mittelstellung - Schaltpunkt für Licht ein/aus?
;
if RC_Signal < dumm then ; gibt es ein RC Signal für Licht ein/aus?
;
if Licht = 0 then ; wenn das Licht aus ist
Licht = 1 ; Licht auf ein setzen
high Licht_vorne ; Licht vorne einschalten
high Licht_hinten ; Licht hinten einschalten
else ; sonst
Licht = 0 ; Licht auf aus setzen
low Licht_vorne ; Licht vorne ausschalten
low Licht_hinten ; Licht hinten ausschalten
endif ; Ende von: Licht
;
do ; Warteschleife
pulsin RC_Kanal, 1, RC_Signal ; RC Signal übernehmen
loop until RC_Signal > dumm ; Ende von: do (Warteschleife)
;
endif ; Ende von: RC_Signal
;
goto RC_Modul ; Ende von: RC_Modul
;
start1: ; Multitask-Marke für das Lauflicht
;
if KITT = 0 then ; wenn KITT 0 ist ein normales Lauflicht
;
if LR = 1 then ; nach rechts
if LED < LED_max then ; wenn Ausgang LED_max noch nicht erreicht wurde
LED = LED + 1 ; einen Ausgang weiter
else ; sonst
LR = 0 ; LR nach links
endif ; Ende von: if LED
endif ; Ende von: if LR
if LR = 0 then ; nach links
if LED > 1 then ; wenn Ausgang 1 noch nicht erreicht wurde
LED = LED - 1 ; einen Ausgang zurück
else ; sonst
LR = 1 ; LR nach rechts
endif ; Ende von: if LED
endif ; Ende von: if LR
switch on LED ; LED an Ausgang C.x einschalten
pause LED_ein ; x Millisekunden die LED einschalten
switch off LED ; LED an Ausgang C.x ausschalten
;
else ; sonst ein KITT Lauflicht
;
for LED = 1 to LED_max ; die LEDs nach rechts laufen lassen
switch on LED ; LED x ein
pause P1 ; x Millisekunden Pause zum Überblenden
LED_x = LED - 1 ; LED_x ist 3 LEDs davor
pause P2 ; x Millisekunden Pause zum Überblenden
switch off LED_x ; LED x aus
next LED ; Ende von: for LED (rechts)
for LED = LED_max to 1 step -1 ; die LEDs nach links laufen lassen
switch on LED ; LED x ein
pause P1 ; x Millisekunden Pause zum Überblenden
LED_x = LED + 1 ; LED_x ist 3 LEDs davor
pause P2 ; x Millisekunden Pause zum Überblenden
switch off LED_x ; LED x aus
next LED ; Ende von: for LED (links)
;
endif ; Ende von: KITT
;
goto start1 ; Ende von: Multitask-Marke für das Lauflicht
;
Grüßle, Naubaddi