'##Programmwahl
Select Case Programm
Case 1: 'Flash = Dauerfarbe
Red = Lookup(colourcounter , Redtable)
Green = Lookup(colourcounter , Greentable)
Blue = Lookup(colourcounter , Bluetable)
Print "rot " ; Red
Print "green " ; Green
Print "blue " ; Blue
Case 2: 'strobe = blinken
Bright = 64 'helligkeit auf 100% einstellen
'If Strobectr < 255 Then
' Incr Strobectr
' Else
' Strobectr = 0
' End If
If Strobectr > Pwmctr Then
Red = Lookup(colourcounter , Redtable)
Green = Lookup(colourcounter , Greentable)
Blue = Lookup(colourcounter , Bluetable)
Else
Red = 0
Green = 0
Blue = 0
End If
'Print "strobectr" ; Bright ; " \ " ; Strobectr
' Print "rot " ; Red
'Print "green " ; Green
'Print "blue " ; Blue
Case 3 To 4: '3fade = schnell faden /'4smooth = langsam faden
'verzögerungszeit je nach Programm
If Programm = 3 Then 'schnell faden
Fadezeit = 200
Haltezeit = 2
Elseif Programm = 4 Then 'langsam faden
Fadezeit = 800
Haltezeit = 6
End If
If Red < Tred Then
Incr Red
Elseif Red > Tred Then
Decr Red
Else
Erreicht.0 = 1
'Print "rotwert erreicht!"
End If
If Green < Tgreen Then
Incr Green
Elseif Green > Tgreen Then
Decr Green
Else
Erreicht.1 = 1
'Print "grünwert erreicht!"
End If
If Blue < Tblue Then
Incr Blue
Elseif Blue > Tblue Then
Decr Blue
Else
Erreicht.2 = 1
'Print "blauwert erreicht!"
End If
Waitms Fadezeit 'zeit zwischen jedem fadeschritt
If Erreicht = 7 Then
Wait Haltezeit 'zeit welche farbe gehalten wird bis es losfaded zur nächsten
Print "farbe erreicht, lade nächste zielwerte,"
Print "Farbe: " ; Colourcounter
Erreicht = 0
Colourcounter = Colourcounter + 3
If Colourcounter >= 15 Then 'colourcounter zurücksetzen
Colourcounter = 0
End If
Tred = Lookup(colourcounter , Redtable)
Tgreen = Lookup(colourcounter , Greentable)
Tblue = Lookup(colourcounter , Bluetable)
End If
End Select
'debugausgaben
'Print "programm-modus " ; Programm
'Print "Colourcounter " ; Colourcounter
'Print "Taste " ; Adresse ; " / " ; Ausgabestring
'Print "Helligkeitswert" ; Bright
Loop
End
'ROUTINEN-----------------------------------------------------------------------
'#FB
Tim1_isr: 'wenn der Timer überläuft, hat es 16.000.000 / 8 / 65536 ~ 33ms kein IR Signal gegeben
If Flanken_index < 400 Then 'Flanke ist vor dem Empfang auf 400;
Disable Int0
Stop Timer1
Ausgabe_flag = 1
Else
If Gifr.intf0 = 1 Then Gifr.intf0 = 1 'sieht blöd aus, bewirkt aber das Löschen eines zwischenzeitlich aufgetretenen Interrupts
Enable Int0 'nun kann Int0 wieder freigegeben werden. Hierdurch synchronisiert er auf den Anfang des nächstes Codes
End If
Return
Int0_isr: 'RC Impuls erkannt
Zeit = Timer1 'abgelaufene Zeit speichern
Timer1 = 0 'Timer1 neu starten
Zeit = Zeit - 7 '-7 weil das Aufrufen der ISR etwa 56 Takte dauert, der Timer1 also um 7 weiterzählt
Shift Zeit , Right 'nun stehen µs in Zeit
If Flanken_index = 400 Then
Flanken_index = 0 'start eines neuen Befehls
End If
If Flanken_index < 400 Then Incr Flanken_index
Flanken_array(flanken_index) = Zeit
Return
'#PWM
Pwm_timer:
If Pwmctr < 64 Then 'max 64 durchläufe, dann neuer zyklus
Incr Pwmctr
Else
Pwmctr = 0
End If
If Bright < Pwmctr Then
Helligkeit = 0 'led an
Else
Helligkeit = 1 'led aus
End If
If Red < Pwmctr Then
Schiebebyte.0 = 0 'led an
Else
Schiebebyte.0 = 1 'led aus
End If
If Green < Pwmctr Then
Schiebebyte.1 = 0 'led an
Else
Schiebebyte.1 = 1 'led aus
End If
If Blue < Pwmctr Then
Schiebebyte.2 = 0 'led an
Else
Schiebebyte.2 = 1 'led aus
End If
'Schieberegister ansteuerung
If Schiebebyte <> Schiebebyte_alt Then 'ändert sich der Wert nicht mehr wird nicht mehr der ausgang gepulst, somit ergeben sich satte farben
Latch = 1 'latch setzen
Shiftout Dout , Clock , Schiebebyte , 0 , 8 , 1 'µs warten
Latch = 0 'latch zurücksetzen
Latch = 1 'latch setzen
Schiebebyte_alt = Schiebebyte
End If
Return
'#Save&Load
'data
'programmnummer,(farbe falls bei programm vorhanden), helligkeit, geschwindigkeit
$eeprom
'Data 1 , 2 , 3 , 4 , 5
'Data Programm , Colourcounter , Bright,
Speichern: 'der einstellunegn im EEPROM
For I2 = 0 To 5
Einstellungen_rom(i2) = Einstellungen(i2)
Next
Return
Laden: 'der einstellunegn im EEPROM
For I2 = 0 To 5
Einstellungen(i2) = Einstellungen_rom(i2)
Print "Data" ; I2 ; " " ; Einstellungen(i2)
Next
Return
'#POWEROn
Poweron:
Print "taste: " ; Adresse
Print "poweron" ; Poweron
If Adresse = 159 And Poweron = 0 Then
'Gosub speichern
'Poweron = 0
Print "schlafen gehen"
Mcucr.isc01 = 0 'umschalten von Falling auf Low Level
Power Powersave
Elseif Adresse = 31 And Poweron = 1 Then
'Gosub laden
'Poweron = 0
Mcucr.isc01 = 1 'umschalten von Low Level auf Falling
Print "wurde angeschaltet" 'wieder schlafen gehen
End If
Return
'#Klatschschalter
Klatsch:
If Klatsche = 1 Then
Incr Klatschctr
End If
If Klatschctr > 2 Then
Klatschctr = 0
Elseif Klatschctr = 2 Then
Klatsch = 1
Else
Klatsch = 0
End If
Return
$data
'COLOUR Table-------------------------------------------------------------------
'1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
'red, hred, or, hor, ye , gr , hgr, tuer, hbl, hhbl, bl, ddpu, dpu, pu, hpu, wh
Redtable:
Data 064 , 025 , 064 , 064 , 064 , 000 , 050 , 021 , 034 , 000 , 000 , 000 , 018 , 027 , 031 , 064
Greentable:
Data 000 , 023 , 036 , 034 , 064 , 064 , 064 , 064 , 051 , 034 , 000 , 000 , 015 , 023 , 026 , 064
Bluetable:
Data 000 , 023 , 000 , 000 , 000 , 000 , 028 , 040 , 058 , 034 , 064 , 035 , 035 , 051 , 060 , 064