Du bist hier: Männertage > Projekte > Ampelschaltung Picaxe


Ampelschaltung als Picaxe Bausatz
Juli 2015 | Gregor | gebautes Objekt, Programmierung

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