Leuchtender und singender Nikolaus mit Picaxe-Steuerung zum Selbstbasteln
Picaxe Firmware
Die Firmware wurde mit dem Picaxe Editor erstellt. Ganz oben im Quellcode sind die verwendeten Portpins definiert, sodass man im weiteren Verlauf mit sprechenden Namen anstatt mit den direkten Portpin-Namen arbeiten kann.
#picaxe 14M2
symbol LED_MUETZE = B.0
symbol LED_AUGE_1 = C.0
symbol LED_AUGE_2 = C.1
symbol LED_NASE = B.1
symbol LED_MUND_1 = B.3
symbol LED_MUND_2 = B.4
symbol LED_MUND_3 = B.5
symbol LED_SCHUH_1 = C.2
symbol LED_SCHUH_2 = C.4
symbol SPEAKER = B.2
symbol TUNE_LED_MASK = %00111000
; Taster an C.3 (Taster gedrueckt = LOW-Pegel)
#define KEY_PRESSED PINC.3 = 0
#define KEY_PULLUP_MASK %0000100000000000
Bei Bedarf können die Pins an dieser zentralen Stelle angepasst werden, falls eine Schaltungsänderung vorgenommen wird. Über die Defines LED_xxx
sind zum Beispiel die entsprechenden Portpins der LEDs definiert, mit TUNE_LED_MASK
wird festgelegt, welche LEDs während der Soundausgabe blinken.
Falls man die Leuchtdioden anders als im Schaltplan angegeben beschaltet hat, kann hier eine Anpassung vorgenommen werden. Mit dem Define SPEAKER
ist der Soundausgang festgelegt und mit KEY_PRESSED
der Eingangspin sowie der Zustand bei gedrücktem Taster. Passend zum Taster-Pin gibt KEY_PULLUP_MASK
den Wert für den entsprechenden internen Pullup an. Beim 14M2 befinden sich hierfür die Pins für den Port C in den oberen 16 Bits.
Das Programm besteht aus 2 Tasks start0
und start1
, das heißt, es wird die Multitasking-Fähigkeit des Picaxe 14M2 ausgenutzt. Der Picaxe-Editor sorgt dann dafür, dass der Code so in den Picaxe geflasht wird, dass immer jeweils ein Befehl eines Tasks ausgeführt und dann zum nächsten Task weitergeschaltet wird. Die entsprechenden Befehlszeilen der beiden Tasks hier werden also immer im Wechsel nacheinander ausgeführt.
Der Task start0
übernimmt die Ansteuerung der LEDs. Im Beispiel werden zunächst die LEDs im Gesicht des Nikolaus nacheinander eingeschaltet, anschließend zwinkert er durch Blinken mit den Augen, dann werden die LEDs in der Mütze und Schuhe nacheinander eingeschaltet. Nachdem alle LEDs an sind, werden diese von oben nach unten sozusagen zeilenweise wieder ausgeschaltet, bevor sich das ganze wiederholt. Natürlich kann man der eigenen Krreativität freien Lauf lassen und beliebige Lichteffekte generieren.
Der Task start1
aktiviert den internen Pullup am Pin C.3 für den Taster, sodass bei nicht gedrücktem Taster ein High-Pegel eingelesen wird. Über die Abfrage KEY_PRESSED
wird geprüft, ob Low-Pegel anliegt, d.h. ob die Taste gedrückt ist. Falls ja, wird mit dem suspend
-Befehl der Task 0 gestoppt, weil die LEDs nun von Task 1 gesteuert werden sollen. Nun werden alle LEDs eingeschaltet und anhand der Variablen songNumber
wird die entsprechende Melodie abgespielt.
start1:
input SPEAKER
pullup KEY_PULLUP_MASK
if KEY_PRESSED then
suspend 0 ; Task 0 stoppen
gosub leds_on
select case songNumber
case 0
gosub jingle_bells
case 1
gosub silent_night
case 2
gosub rudolph
case 3
gosub jingle_bells_extended
else
songNumber = 0
gosub jingle_bells
endselect
songNumber = songNumber + 1
pause 1000
gosub leds_off
pause 1000
restart 0 ; Task 0 von vorne starten
endif
goto start1
Es gibt im Picaxe 14M2 vier fest einprogrammierte Melodien, die mit dem play
-Befehl abgespielt werden können. Zusätzlich können mit dem tune
-Befehl weitere Melodien im RTTTL-Klingelton-Format (monophon) ausgegeben werden. Dieses Format war bei den früheren Mobiltelefonen weit verbreitet. Im Internet gibt es eine große Auswahl an Melodien, zum Beispiel auf dieser Seite, die im Picaxe Editor über den Tune Wizard importiert werden können.
Am Ende der Melodie wird die Variable songNumber
um 1 erhöht, sodass beim nächsten Tastendruck die nächste Melodie abgespielt wird. Anschließend werden alle LEDs ausgeschaltet und mit restart
der Task 0 neu gestartet, sodass dieser wieder von vorne beginnt.