; ******************************* ; ***** Programm Header ***** ; ******************************* ; Filename: Polizeilicht mit WS2803 ; Date: 08.02.2016 ; File Version: 1.0 ; Written by: Thomas Vetter ; Function: Imitiert Deutsches und Amerikanisches Polizeilicht ; (diverse Blinkeffekte sind per Taster einstellbar) ; Last Revision: 11.02.2016 ; Target PICAXE: 20X2 ; ******************************* #picaxe 20x2 setfreq m32 ;------------------------------------------------------------------------------ ;EEprom Daten ; LED9 ; LED1 LED2 LED3 LED4 LED5 LED6 LED7 LED8 NC ; | b r | b r | b r | b r | b r | b r | b r | b r | | eeprom 0, (255, 0, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); Rundumlicht blau eeprom 18, ( 0, 255, 0, 255, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); Rundumlicht rot eeprom 36, (255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0, 0); Blitzen_blau eeprom 54, ( 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 0); Blitzen_rot eeprom 72, ( 0, 0, 0, 0, 255, 0, 255, 0, 0, 0, 0, 0, 0, 255, 0, 255, 0, 0); Rundumlicht blau_rot eeprom 90, (255, 0, 0, 255,255, 0, 0, 255,255, 0, 0, 255,255, 0, 0, 255, 0, 0); Blink_blau_rot eeprom 108,(255, 0, 255, 0, 0, 255, 0, 255,255, 0, 255, 0, 0, 255, 0, 255, 0, 0); Blink_blau_rot_doppel ;------------------------------------------------------------------------------ ;let adcsetup = 0 let dirsb = %10000000 let dirsc = %00000001 setint %00000100,%00000100 ; Benutzter Eingang: C.2 ;------------------------------------------------------------------------------ symbol Zaehler = b0 symbol Farbdata = b1 symbol Taster = b2 symbol Bytezaehler = b3 symbol Bytetemp = b4 ;------------------------------------------------------------------------------ HSPISETUP spimode11e,spifast ; Ausgabemodus setzen ;------------------------------------------------------------------------------ Main: read 255, Taster ; Taster abfragen select case Taster case 0 goto Ausschalten case 1 goto Dimm_blau case 2 goto Dimm_rot case 3 goto Dimm_blau_rot case 4 goto Dimm_blau_rot_gemischt case 5 goto Blink_blau_rot case 6 goto Blink_blau_rot_doppel case 7 goto Blitzen_blau case 8 goto Blitzen_rot case 9 goto Blitzen_blau_rot case 10 goto Rundum_blau case 11 goto Rundum_rot case 12 goto Rundum_blau_rot endselect goto Main ;------------------------------------------------------------------------------ Rundum_blau: for Zaehler = 0 to 15 read Zaehler, Farbdata put Zaehler, Farbdata next Zaehler gosub Ausgabe_blau L1: ; Hauptschleife let Bytezaehler = 0 get Bytezaehler, Bytetemp ; erstes Byte sichern for Zaehler = 0 to 7 inc Bytezaehler inc Bytezaehler get Bytezaehler, Farbdata dec Bytezaehler dec Bytezaehler put Bytezaehler , Farbdata let Bytezaehler = Bytezaehler + 2 next zaehler put Bytezaehler,Bytetemp gosub Ausgabe_blau pause 80 goto L1 ; das ganze nochmal ;------------------------------------------------------------------------------ Rundum_rot: for Zaehler = 18 to 33 read Zaehler, Farbdata put Zaehler, Farbdata next Zaehler gosub Ausgabe_rot L2: ; Hauptschleife let Bytezaehler = 17 get Bytezaehler, Bytetemp ; erstes Byte sichern for Zaehler = 0 to 7 inc Bytezaehler inc Bytezaehler get Bytezaehler, Farbdata dec Bytezaehler dec Bytezaehler put Bytezaehler , Farbdata let Bytezaehler = Bytezaehler + 2 next zaehler put Bytezaehler,Bytetemp gosub Ausgabe_rot pause 80 goto L2 ; das ganze nochmal ;------------------------------------------------------------------------------ Rundum_blau_rot: let Bytezaehler = 0 for Zaehler = 72 to 87 read Zaehler, Farbdata put Bytezaehler, Farbdata inc Bytezaehler next Zaehler gosub Ausgabe_blau L3: ; Hauptschleife let Bytezaehler = 0 get Bytezaehler, Bytetemp ; erstes Byte sichern for Zaehler = 0 to 6 inc Bytezaehler inc Bytezaehler get Bytezaehler, Farbdata dec Bytezaehler dec Bytezaehler put Bytezaehler, Farbdata let Bytezaehler = Bytezaehler + 2 next zaehler put Bytezaehler,Bytetemp let Bytezaehler = 1 get Bytezaehler, Bytetemp ; erstes Byte sichern for Zaehler = 0 to 6 inc Bytezaehler inc Bytezaehler get Bytezaehler, Farbdata dec Bytezaehler dec Bytezaehler put Bytezaehler, Farbdata let Bytezaehler = Bytezaehler + 2 next zaehler put Bytezaehler, Bytetemp gosub Ausgabe_blau pause 100 goto L3 ; das ganze nochmal ;------------------------------------------------------------------------------ Blink_blau_rot_doppel: let Bytezaehler = 0 for Zaehler = 108 to 123 read Zaehler, Farbdata put Bytezaehler, Farbdata inc Bytezaehler next Zaehler goto L4 Blink_blau_rot: let Bytezaehler = 0 for Zaehler = 90 to 105 read Zaehler, Farbdata put Bytezaehler, Farbdata inc Bytezaehler next Zaehler L4: gosub Ausgabe_blau for Zaehler = 0 to 15 get Zaehler, Farbdata let Farbdata = Farbdata XOR 255 put Zaehler, Farbdata next Zaehler pause 1000 goto L4 ;------------------------------------------------------------------------------ Dimm_blau: ; Auf und Ab Schwellen blau for farbdata = 1 to 255 for Zaehler = 0 to 15 step 2 put Zaehler,farbdata next Zaehler gosub Ausgabe_blau next farbdata for farbdata = 255 to 1 step -1 for Zaehler = 0 to 15 step 2 put Zaehler,Farbdata next Zaehler gosub Ausgabe_blau next farbdata goto Dimm_blau ;------------------------------------------------------------------------------ Dimm_rot: ; Auf und Ab Schwellen rot for farbdata = 1 to 255 for Zaehler = 1 to 16 step 2 put Zaehler,farbdata next Zaehler gosub Ausgabe_blau next farbdata for farbdata = 255 to 1 step -1 for Zaehler = 1 to 16 step 2 put Zaehler,Farbdata next Zaehler gosub Ausgabe_blau next farbdata goto Dimm_rot ;------------------------------------------------------------------------------ Dimm_blau_rot: for farbdata = 1 to 255 for Zaehler = 0 to 15 step 2 put Zaehler,farbdata next Zaehler gosub Ausgabe_blau next farbdata for farbdata = 255 to 1 step -1 for Zaehler = 0 to 15 step 2 put Zaehler,Farbdata next Zaehler gosub Ausgabe_blau next farbdata for farbdata = 1 to 255 for Zaehler = 1 to 16 step 2 put Zaehler,farbdata next Zaehler gosub Ausgabe_blau next farbdata for farbdata = 255 to 1 step -1 for Zaehler = 1 to 16 step 2 put Zaehler,Farbdata next Zaehler gosub Ausgabe_blau next farbdata goto Dimm_blau_rot ;------------------------------------------------------------------------------ Dimm_blau_rot_gemischt: for farbdata = 1 to 255 for Zaehler = 0 to 15 step 4 ; blau put Zaehler,farbdata next Zaehler for Zaehler = 3 to 19 step 4 ;rot put Zaehler,farbdata next Zaehler gosub Ausgabe_blau next farbdata for farbdata = 255 to 1 step -1 for Zaehler = 0 to 15 step 4 put Zaehler,Farbdata next Zaehler for Zaehler = 3 to 19 step 4 put Zaehler,Farbdata next Zaehler gosub Ausgabe_blau next farbdata goto Dimm_blau_rot_gemischt ;------------------------------------------------------------------------------ B_blau: let Bytezaehler = 0 for Zaehler = 36 to 51 read Zaehler,Farbdata put Bytezaehler,farbdata inc Bytezaehler next Zaehler for b9 = 1 to 3 let ptr =0 for Zaehler = 0 to 17 hspiout (@ptrinc) next Zaehler pause 200 for Zaehler = 0 to 17 hspiout (0) next Zaehler pause 200 next b9 return ;------------------------------------------------------------------------------ B_rot: let Bytezaehler = 0 for Zaehler = 54 to 71 read Zaehler,Farbdata put Bytezaehler,farbdata inc Bytezaehler next Zaehler for b9 = 1 to 3 let ptr =0 for Zaehler = 0 to 17 hspiout (@ptrinc) next Zaehler pause 200 for Zaehler = 0 to 17 hspiout (0) next Zaehler pause 200 next b9 return ;------------------------------------------------------------------------------ Ausgabe_blau: let ptr = 0 for Zaehler = 0 to 17 hspiout (@ptrinc) next Zaehler return ;------------------------------------------------------------------------------ Ausgabe_rot: let ptr = 18 for Zaehler = 18 to 35 hspiout (@ptrinc) next Zaehler return ;------------------------------------------------------------------------------ loeschen: ; Alle LED's auschalten for Zaehler = 0 to 17 hspiout (0) next Zaehler return ;------------------------------------------------------------------------------ Blitzen_blau: gosub B_blau pause 400 goto Blitzen_blau ;------------------------------------------------------------------------------ Blitzen_rot: gosub B_rot pause 400 goto Blitzen_rot ;------------------------------------------------------------------------------ Blitzen_blau_rot: gosub B_blau pause 400 Gosub B_rot pause 400 goto Blitzen_blau_rot ;------------------------------------------------------------------------------ Ausschalten: gosub loeschen do loop ;------------------------------------------------------------------------------ Interrupt: if PinC.2 = 1 then goto Interrupt gosub loeschen inc Taster if Taster > 12 then let Taster = 0 endif write 255,Taster reset setint %00000100,%00000100 return ;------------------------------------------------------------------------------ end