Picaxe ist ein Mikrocontroller den man mit dem PC programmieren kann. Hier habe ich eine Ampelschaltung programmiert. Die Schaltung kann man umschalten zwischen: Autoschaltung, Fußgängerschaltug und Nachtschaltung. Den Bausatz habe ich zusammen mit Batterie und einem Schlüsselschalter in ein Kästchen eingebaut.
Hier ein paar Fotos:
Hier ist das Programm:
'Ampelschaltungen
'Autoampel: rot, rot + gelb, gruen, gelb, rot
'Fussgaengerampel: rot, gruen, rot
'Nachtschaltung: gelb blinkend
'Taster druecken um zwischen Auto und Fussgaenger umzuschalten
'Wenn es Dunkel wird (Lichtsensor) ist immer nur die Nachtschaltung an
'Manchmal macht es auch Quatsch ;-)
'1.Version (Autoampel mit Nachtschaltung) programmiert von Gregor alleine
'2.Version (zusätzlich umschalten von Auto auf Fussgaenger mit Interrupt, und MacheQuatsch) mit Hilfe von Horst
'Variablen
' s0,
' b0, b1, b2, b3,
symbol s0 = bit0 'BIT, s = schalter, 0/1, an/aus
symbol s1 = bit1
s0 = 0
symbol zaehler = b1 'BYTE, hier kann von 0 bis 255 gezaehlt werden
'den LEDs an den 3 Ausgangspins (C.0, C.1, C.3) beschreibende Namen geben (Alias)
symbol rot = C.0
symbol gelb = C.1
symbol gruen = C.2
low rot, gelb, gruen 'alle LEDs aus
'Interrupt einstellen
setint %00001000,%00001000 'Unterbrechung wenn der Taster gedrückt wird
'Ampel wird umgeschaltet von Auto auf Fussgaenger
main:
zaehler = zaehler + 1
if zaehler > 10 then
low rot, gelb, gruen
pause 250
gosub machequatsch
zaehler = 0
low rot, gelb, gruen
if pinC.4 = 1 then
high gruen
pause 500
endif
endif
if pinC.4 = 0 then 'lichtsensor ist 0 bei Dunkelheit
gosub nachtschaltung
goto main 'bleibt an solange es dunkel ist, keine Fussgaenger- oder Autoschaltung
endif
if s0 = 1 then
gosub fussgaengerampel
else
gosub autoampel
endif
goto main
end
nachtschaltung:
low rot, gelb, gruen 'alle aus
high gelb 'gelb an
pause 1000
low gelb 'gelb aus
pause 1000
return
fussgaengerampel:
low rot, gelb, gruen 'alle aus
high rot 'rot an
pause 2000
low rot
high gruen 'gruen an
pause 3000
return
autoampel:
'start normaler Betrieb
low gruen
high gelb
pause 1000 'wait macht nur ganze Sekunden, pause kann Millisekunden: 1000 (ist auch 1 Sekunde)
high rot
pause 1000
low gelb
pause 2000 'nur noch rot an
high gelb
pause 1000
low rot, gelb
high gruen
pause 3000
'ende normaler Durchlauf
return
machequatsch:
low rot, gelb, gruen
for b3 = 0 to 2
for b2 = 0 to 2 'nacheinander 0 - 2 an und wieder ausschalten
high b2 'hier benutzen wir nocheinmal die alten Pinbezeichnungen, 0 1 2 anstatt von C.0 C.1 C.2 oder unsere beschreibende Namen rot gelb gruen
pause 250
low b2
next b2
pause 500
for b2 = 2 to 0 step -1 'jetzt rückwärts von 2 bis 0 alle kurz ein und ausschalten
high b2
pause 250
low b2
next b2
pause 500
next b3
return
interrupt:
low rot, gelb, gruen
pause 500
high rot, gelb, gruen
pause 500
low rot, gelb, gruen
if s0 = 0 then
s0 = 1
else
s0 = 0
endif
setint %00001000,%00001000
return