'############################################################### '* '* Steuerschaltung für PKW-Bühne mit Traversen '* mit Modusumschaltung durch Incrementalgeber '* Betrieb mit nachgeschalteten ULN2803A an 5V '* Ausfallspeicherung in Eeprom '* '* Version 12 '* '* Im Startmenue KEINE automatische Speicherung der letzten Lichteinstellung! '* Die Show-Einstellung kann NUR manuell gespeichert werden! '* '* '* © Willie 10.07.2017 '* '*************************************************************** '* '* Schaltung: '* Prozessor ATMega32 '* Incrementalgeber '* LCD 20x4, mit I2C-Adapter '* '* Vcc auf +5V (Pin 10) '* GND auf GND (Pin 11) '* 100nF Kerko zwischen Vcc und GND '* 10kOhm zwischen PD1 (Pin 15) und Vcc - Pullup für INC-B (Pullup auf Inc-Platine) '* 10kOhm zwischen PD2 (Pin 16) und Vcc - Pullup für Int0 INC-A (Pullup auf Inc-Platine) '* 10kOhm zwischen PD3 (Pin 17) und Vcc - Pullup für Int1 Taster INC-T (Pullup auf Inc-Platine) '* 3,6kOhm zwischen PC0 (Pin 22) und Vcc - Pullup für I2C-SCL '* 3,6kOhm zwischen PC1 (Pin 23) und Vcc - Pullup für I2C-SDA '* '* 8 weiße LEDs (1-8) (PB0 - PB7) '* 2 RGB-LEDs (9+10) (PA0 - PA5) '* 2 RGB-LEDs (11+12) (PC2 - PC7) '* '*************************************************************** '* '* HARDWAREEINSTELLUNGEN DES ATMEGA32 '* '* Fusebit KLA987 = 1MHz '* Fusebit High H = 1:JTAG disabled '* '*************************************************************** '* '* WICHTIG beim ersten Start nach Neuprogrammierung für erste '* definierte Inhalte des Eeprom für letzte Einstellung und Dimmwert '* '* 1. Neue Szenerie auswählen '* 2. Alles Voll An auswählen '* 3. Dimmen einmal ein- und dann wieder ausschalten '* 4. Geschwindigkeit einmal ein- und dann wieder ausschalten '* '############################################################### '***** Genutzter Microcontroller, Takt in Hz, Stacks & Framesize $regfile = "m32def.dat" ' ATMega32; Stacks etc.automatisch aus Bascom übernommen $crystal = 1000000 ' Hardware intern auf 1 MHz eingestellt (Fuse-Bits!) $hwstack = 40 $swstack = 16 $framesize = 32 '***** Portpin-Configs & Interrupts Config Porta = Output ' Ports für RGB-LEDs (9+10) Config Portb = Output ' Ports für weiße LEDs (1-8) Config Portc.7 = Output ' Port für RGB-LEDs (11) Config Portc.6 = Output ' Port für RGB-LEDs (11) Config Portc.5 = Output ' Port für RGB-LEDs (11) Config Portc.4 = Output ' Port für RGB-LEDs (12) Config Portc.3 = Output ' Port für RGB-LEDs (12) Config Portc.2 = Output ' Port für RGB-LEDs (12) Config Pind.1 = Input ' Eingabeportpin für Drehregler INC-B Config Pind.2 = Input ' Eingabeportpin für Drehregler INC-A Config Pind.3 = Input ' Eingabeportpin für Drehregler INC-T Config Int0 = Rising ' Positive Flanke auswerten Config Int1 = Rising ' Positive Flanke auswerten On Int0 Inc_geber_isr_a ' Interrupt Service Routine A On Int1 Inc_geber_isr_b ' Interrupt Service Routine B Enable Interrupts ' Master Interrupts einschalten Enable Int0 ' Interrupt 0 einschalten Enable Int1 ' Interrupt 1 einschalten Config Portd.5 = Output ' PWM 1 Config Portd.4 = Output ' PWM 2 '***** Variablen für Eeprom Dim Ee_sequenz_last(20) As Eram Dword ' letzte Sequenz - 20 LED-Sequenzen à 32 Schaltzustände Dim Ee_dimmwert As Eram Word ' letzter verwendeter Dimmwert Dim Ee_impuls As Eram Word ' letzte verwendete Geschwindigkeit '***** 16-Bit Timer Config Config Timer1 = Pwm , Pwm = 10 , Prescale = 8 , Compare_a_pwm = Clear_up , Compare_b_pwm = Clear_up '8.000.000/8/1023/2 ~ 489Hz '***** I2C & LCD konfigurieren Config Scl = Portc.0 ' I2C Scl (Pin 22) Config Sda = Portc.1 ' I2C Sda (Pin 23) Config Lcd = 20x4 $lib "YwRobot_Lcd_i2c.lib" ' YwRobot Treiber für LCD Const Pcf8574_lcd = 126 ' Slave-Adresse des I2C-LCDs 'Pcf8574_lcd = 78 'Pcf8574A_lcd = 126 Dim Lcd_backlight As Byte ' 1 = an; 0 = aus. Wird erst durch einen LCD-Befehl umgesetzt! Config I2cdelay = 1 ' 1=1Mhz,5=200Khz,10=100Khz,15=66,66Khz 'Wenn in Lcd keine Anzeige muß der Delaywert erhöht werden.Mit Wert 15 beginnen und dann langsam verringern. Waitms 300 ' warte bis Kondensator bei Ta0 geladen, auch für LCD-Init! '***** eigene Characters konfigurieren für die Menüanzeige Deflcdchar 0 , 32 , 32 , 31 , 31 , 31 , 32 , 32 , 32 ' replace [x] with number (0-7) Deflcdchar 1 , 16 , 24 , 28 , 30 , 28 , 24 , 16 , 32 ' replace [x] with number (0-7) '***** Aliaszuweisungen B Alias Pind.1 ' Incrementalgeber -B- (Pin 15) A Alias Pind.2 ' Int0 Incrementalgeber -A- (Pin 16) T Alias Pind.3 ' Int1 Incrementalgeber Taster (Pin 17) Ledweiss Alias Pwm1b 'Alias für die Dimmung der weissen LEDs Ledrgb Alias Pwm1a 'Alias für die Dimmung der RGB-LEDs Led1 Alias Portb.0 Led2 Alias Portb.1 Led3 Alias Portb.2 Led4 Alias Portb.3 Led5 Alias Portb.4 Led6 Alias Portb.5 Led7 Alias Portb.6 Led8 Alias Portb.7 Led9 -r Alias Porta.0 Led9 -g Alias Porta.1 Led9 -b Alias Porta.2 Led10 -r Alias Porta.3 Led10 -g Alias Porta.4 Led10 -b Alias Porta.5 Led11 -r Alias Portc.7 Led11 -g Alias Portc.6 Led11 -b Alias Portc.5 Led12 -r Alias Portc.4 Led12 -g Alias Portc.3 Led12 -b Alias Portc.2 '***** Variablen Dim I As Byte ' Zählvariable LED-Sequenzen Dim C As Byte ' Zählvariable Szenen oder Menü ändern Dim Inv As Dword ' Hilfsvariable für Invertieren-Funktion Dim Led_aktiv(20) As Dword ' 20 aktive LED-Sequenzen à 32 Schaltzustände Dim Led_sequenz(6) As Dword ' 6 Muster LED-Sequenzen à 32 Schaltzustände Dim Impuls As Word ' legt die Impulsdauer fest Dim Sequenz As Byte ' Länge der Sequenz Werte 0 - 31 entsprechen 1 - 32 Sequenzbits Dim Zeile As Byte ' aktueller Menüzeilenwert Dim Zeile_alt As Byte ' alter Menüzeilenwert Dim Titel As Byte ' Menütitel LCD Zeile 1 Dim R As Byte ' Rechenvariable für LCD-Anzeige Dim Standby As Byte ' Steuervariable für Standby-Funktion Dim Dimmermodus As Byte ' Steuervariable für Dimmer-Funktion Dim Dimmwert As Word ' Steuervariable für LED-Helligkeit Dim Dimmwert_alt As Word ' alter Wert für LED-Helligkeit Dim Auswahl As Byte ' Steuervariable für Funktion Menü Dim Rgb_flag As Byte ' Flag für RGB-Alle An Dim Speedmodus As Byte ' Aufrufvariable für Speedmodus Dim Showmodus As Byte ' Aufrufvariable für Showmodus Dim Showablauf As Byte ' Steuervariable für Showmodus Dim Zs As Word ' Zählvariable für Showmodus Dim Gs As Word ' Globaler Durchlaufzähler für Showmodus '***** Einstellungen für Licht- & LED-Sequenzmuster Impuls = 150 ' Impulsdauer in Millisekunden Sequenz = 31 ' s. o. Led_sequenz(1) = &B00000000000011110000000000001111 ' Lauflicht 1 Led_sequenz(2) = &B00000000111100000000000011110000 ' Lauflicht 2 Led_sequenz(3) = &B00001111000000000000111100000000 ' Lauflicht 3 Led_sequenz(4) = &B11110000000000001111000000000000 ' Lauflicht 4 Led_sequenz(5) = &B00000000000000000000000000000000 ' Alle Sequenzen aus Led_sequenz(6) = &B11111111111111111111111111111111 ' Alle Sequenzen an '***** Starteinstellungen Speedmodus = 0 ' Speedmodus bei Start ausgeschaltet Dimmermodus = 0 ' Dimmermodus bei Start ausgeschaltet Dimmwert = 1023 ' Startwert max.LD-Helligkeit Dimmwert_alt = 1023 ' Vergleichsvariable für Helligkeitsänderung Ledweiss = Dimmwert ' Startwert PWM 1 Ledrgb = Dimmwert ' Startwert PWM 2 Auswahl = 0 ' Flag für Ansprung der Szenenänderung Inv = &B11111111111111111111111111111111 ' Arbeitsvariable für Invertieren Funktion Zeile = 11 ' Startwert Zeilenzähler Zeile_alt = 11 ' Startwert Zeilenzähler Alt Gs = 0 ' Startwert Durchlaufzähler für Showmodus Disable Interrupts ' Reaktion auf Drehen während der Startsequenz verhindern Cls Locate 1 , 1 ' Startanzeige mit Versionsnummer Lcd " Steuerung fuer" Locate 2 , 1 Lcd " Autoshowbuehne" Locate 4 , 1 Lcd "Vers.12 10.07.2017" Wait 5 Cls Gosub Lcd_anzeige ' Startanzeige Menüzeilenwert Enable Interrupts ' nach Startsequenz Interrupts wieder zulassen Zeile = 11 ' Startwert Zeilenzähler '############################################################### ' Hauptprogramm '############################################################### Do ' Start des Hauptprogramms in Endlosschleife For I = 0 To Sequenz Led1 = Led_aktiv(1).i ' den eimzelnen LEDS immer die aktuellen Schaltzustände zuweisen Led2 = Led_aktiv(2).i Led3 = Led_aktiv(3).i Led4 = Led_aktiv(4).i Led5 = Led_aktiv(5).i Led6 = Led_aktiv(6).i Led7 = Led_aktiv(7).i Led8 = Led_aktiv(8).i Led9 -r = Led_aktiv(9).i Led9 -g = Led_aktiv(10).i Led9 -b = Led_aktiv(11).i Led10 -r = Led_aktiv(12).i Led10 -g = Led_aktiv(13).i Led10 -b = Led_aktiv(14).i Led11 -r = Led_aktiv(15).i Led11 -g = Led_aktiv(16).i Led11 -b = Led_aktiv(17).i Led12 -r = Led_aktiv(18).i Led12 -g = Led_aktiv(19).i Led12 -b = Led_aktiv(20).i If Standby = 1 Then ' Nur Blinken der Anzeige im Stand By Modus Toggle Lcd_backlight Locate 2 , 1 Wait 1 Else Waitms Impuls ' Regelung der Durchlaufgeschwindigkeit des Hauptprogramms If Zeile <> Zeile_alt Then ' Hat sich die Zeilenanzeige geändert? Einstellung in ISR A Zeile_alt = Zeile ' Zeilenwert merken Gosub Lcd_anzeige ' LCD-Anzeige ändern End If If Dimmwert <> Dimmwert_alt Then ' Hat sich der Helligkeitswert der LEDs geändert? Einstellung in ISR A Dimmwert_alt = Dimmwert ' Dimmwert merken Ledweiss = Dimmwert ' PWM 1b den aktuellen Dimmwert zuweisen Ledrgb = Dimmwert ' PWM 1a den aktuellen Dimmwert zuweisen Ee_dimmwert = Dimmwert ' automatische Einstellungsspeicherung End If If Auswahl = 1 Then ' ausgewählten Menüpunkt starten. Einstellung in ISR B Gosub Menue_aendern End If End If Next Loop ' Schleife wieder von Vorn End '############################################################### ' Ende Hauptprogramm '############################################################### '***** Unterprogramm Szenen oder Menü ändern Menue_aendern: C = 0 ' Sequenzbitzähler zurücksetzen Select Case Zeile ' Auswahl in ISR A, Start in ISR B '--------------------STARTMENÜ------------------------------------------------------------- Case 11 : Gosub Up11 ' Neue Szenerie Case 12 : Gosub Up12 ' letzte Szenerie laden Case 13 : Gosub Up13 ' Alles An Case 14 : Gosub Up14 ' Showmodus starten ' '--------------------HAUPTMENÜ------------------------------------------------------------- Case 21 : Gosub Up21 ' Stand By An/Aus Case 22 : Gosub Up22 ' Alle Sequenzen an Case 23 : Gosub Up23 ' Alles Lauflicht Case 24 : Gosub Up24 ' Alle Sequenzen aus Case 25 : Zeile = 31 : Gosub Lcd_anzeige ' Menü links anzeigen Case 26 : Zeile = 41 : Gosub Lcd_anzeige ' Menü rechts anzeigen Case 27 : Zeile = 51 : Gosub Lcd_anzeige ' Menü RGB anzeigen Case 28 : Gosub Up28 ' Showmodus starten Case 29 : Zeile = 61 : Gosub Lcd_anzeige ' Menü INV-Dimmer-Speed anzeigen ' '--------------------MENÜ BÜHNE LINKS------------------------------------------------------ Case 31 : Gosub Up31 ' Alle Sequenzen Links an Case 32 : Gosub Up32 ' Lauflicht Links an Case 33 : Gosub Up33 ' Alle Sequenzen Links Aus Case 34 : Zeile = 25 : Gosub Lcd_anzeige ' Hauptmenü anzeigen ' '--------------------MENÜ BÜHNE RECHTS----------------------------------------------------- Case 41 : Gosub Up41 ' Alle Sequenzen Rechts an Case 42 : Gosub Up42 ' Lauflicht Rechts Case 43 : Gosub Up43 ' Alle Sequenzen Rechts Aus Case 44 : Zeile = 26 : Gosub Lcd_anzeige ' Hauptmenü anzeigen ' '--------------------MENÜ RGB-------------------------------------------------------------- Case 51 : Gosub Up51 ' RGB gemischt An Case 52 : Gosub Up52 ' Nur Rot AN Case 53 : Gosub Up53 ' Nur Gruen AN Case 54 : Gosub Up54 ' Nur Blau AN Case 55 : Gosub Up55 ' Lauflicht RGB Case 56 : Gosub Up56 ' Alle Sequenzen RGB aus Case 57 : Zeile = 27 : Gosub Lcd_anzeige ' Hauptmenü anzeigen ' '--------------------MENÜ INV-DIMMER-SPEED------------------------------------------------- Case 61 : Gosub Up61 ' Alle Sequenzen RGB invertieren Case 62 : Gosub Up62 ' Alle Sequenzen Rot invertieren Case 63 : Gosub Up63 ' Alle Sequenzen Gruen invertieren Case 64 : Gosub Up64 ' Alle Sequenzen Blau invertieren Case 65 : Gosub Up65 ' Bühne Links invertieren Case 66 : Gosub Up66 ' Bühne Rechts invertieren Case 67 : Gosub Up67 ' INT0 auf Dimmereinstellung umschalten Case 68 : Gosub Up68 ' INT0 auf Geschwindigkeitseinstellung umschalten Case 69 : Zeile = 29 : Gosub Lcd_anzeige ' Hauptmenü anzeigen End Select Auswahl = 0 ' Menue Ändern sperren Return '***** Ausführungsroutinen für Caseabfrage Hauptprogramm Up11: ' --- NEUE SZENERIE For C = 1 To 20 Led_aktiv(c) = &B00000000000000000000000000000000 ' Alle Sequenzen aus Next Zeile = 21 ' Zeilenmarke im Hauptmenue Return Up12: ' --- LETZTE AUTOMATISCHE SPEICHERUNG LADEN Impuls = Ee_impuls ' letzte gespeicherte Geschwindigkeit laden Dimmwert = Ee_dimmwert ' letzten gespeicherten Dimmwert laden Ledweiss = Dimmwert ' PWM 1b den letzten Dimmwert zuweisen Ledrgb = Dimmwert ' PWM 1a den letzten Dimmwert zuweisen For C = 1 To 20 ' letztes gespeichertes Muster laden Led_aktiv(c) = Ee_sequenz_last(c) Next Zeile = 21 ' Zeilenmarke im Hauptmenue Return Up13: ' --- ALLE LEDS AN (ohne Speicherung) For C = 1 To 8 Led_aktiv(c) = &B11111111111111111111111111111111 ' alle weißen LEDS an Next For C = 9 To 20 Led_aktiv(c) = &B00000000000000000000000000000000 ' Alle RGB aus, damit nur ausgewählte Farben eingeschaltet werden Next Led_aktiv(9) = &B11111111111111111111111111111111 ' LED 9 Rot an Led_aktiv(13) = &B11111111111111111111111111111111 ' LED 10 Grün an Led_aktiv(17) = &B11111111111111111111111111111111 ' LED 11 Blau an Led_aktiv(18) = &B11111111111111111111111111111111 ' LED 12 Rot an Zeile = 21 ' Zeilenmarke im Hauptmenue Return Up14: ' --- SHOWMODUS STARTEN (ohne Speicherung) Gosub Up_showmodus Zeile = 21 ' Zeilenmarke im Hauptmenue Return Up21: ' --- STANDBY EINSCHALTEN (ohne Speicherung) If Standby = 0 Then Disable Int0 ' Interrupt 0 (Drehfunktion des INC) ausschalten Ledweiss = 0 ' PWM 1b weisse LEDs ausschalten Ledrgb = 0 ' PWM 1a RGB LEDs ausschalten Toggle Lcd_backlight ' Blinken und Anzeige Stand By Cls Locate 2 , 1 Lcd " S T A N D B Y" Locate 4 , 1 Lcd "Ende mit Tastendruck" Standby = 1 ' Beim nächsten Durchlauf nur blinken ' Flag für Standby einschalten End If Return Up22: ' --- ALLE LEDS AN For C = 1 To 8 Led_aktiv(c) = &B11111111111111111111111111111111 ' weiße LEDs an Next For C = 9 To 20 Led_aktiv(c) = &B00000000000000000000000000000000 ' Alle RGB aus, damit nur ausgewählte Farben eingeschaltet werden Next Led_aktiv(9) = &B11111111111111111111111111111111 ' LED 9 Rot an Led_aktiv(13) = &B11111111111111111111111111111111 ' LED 10 Grün an Led_aktiv(17) = &B11111111111111111111111111111111 ' LED 11 Blau an Led_aktiv(18) = &B11111111111111111111111111111111 ' LED 12 Rot an For C = 1 To 20 Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up23: ' --- ALLES LAUFLICHT AN For C = 1 To 4 Led_aktiv(c) = Led_sequenz(c) ' Lauflichtsequenzen 1-4 für LED 1-4 laden Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next For C = 5 To 8 Led_aktiv(c) = Led_sequenz(c - 4) ' Lauflichtsequenzen 1-4 für LED 5-8 laden Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next For C = 9 To 20 Led_aktiv(c) = &B00000000000000000000000000000000 ' Alle RGB aus, damit nur ausgewählte Farben eingeschaltet werden Next Led_aktiv(9) = Led_sequenz(1) ' Lauflichtsequenzen 1-4 für RGB-LEDs laden Led_aktiv(10) = Led_sequenz(2) Led_aktiv(11) = Led_sequenz(3) Led_aktiv(12) = Led_sequenz(2) Led_aktiv(13) = Led_sequenz(3) Led_aktiv(14) = Led_sequenz(4) Led_aktiv(15) = Led_sequenz(3) Led_aktiv(16) = Led_sequenz(4) Led_aktiv(17) = Led_sequenz(1) Led_aktiv(18) = Led_sequenz(4) Led_aktiv(19) = Led_sequenz(1) Led_aktiv(20) = Led_sequenz(2) For C = 1 To 20 Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up24: ' --- ALLE LEDS AUS (ohne Speicherung) For C = 1 To 20 Led_aktiv(c) = &B00000000000000000000000000000000 Next Return Up28: ' --- SHOWMODUS STARTEN Gosub Up_showmodus Zeile = 28 ' Zeilenmarke im Hauptmenue Gosub Lcd_anzeige ' Normale LCD-Anzeige wieder einstellen Return Up31: ' --- ALLE LEDS LINKS AN For C = 1 To 4 Led_aktiv(c) = &B11111111111111111111111111111111 Ee_sequenz_last(c) = &B11111111111111111111111111111111 'automatische Einstellungsspeicherung Next Return Up32: ' --- LAUFLICHT LINKS AN For C = 1 To 4 Led_aktiv(c) = Led_sequenz(c) ' Lauflichtsequenzen 1-4 für LED 1-4 laden Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up33: ' --- ALLE LEDS LINKS AUS For C = 1 To 4 Led_aktiv(c) = &B00000000000000000000000000000000 Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up41: ' --- ALLE LEDS RECHTS AN For C = 5 To 8 Led_aktiv(c) = &B11111111111111111111111111111111 Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up42: ' --- LAUFLICHT RECHTS AN For C = 5 To 8 Led_aktiv(c) = Led_sequenz(c - 4) ' Lauflichtsequenzen 1-4 für LED 5-8 laden Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up43: ' --- ALLE LEDS RECHTS AUS For C = 5 To 8 Led_aktiv(c) = &B00000000000000000000000000000000 Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up51: ' --- RGB GEMISCHT AN (3 Muster) For C = 9 To 20 Led_aktiv(c) = &B00000000000000000000000000000000 ' Alle Sequenzen RGB aus Next If Rgb_flag = 0 Then Led_aktiv(9) = &B11111111111111111111111111111111 ' Rot Led_aktiv(13) = &B11111111111111111111111111111111 ' Grün Led_aktiv(17) = &B11111111111111111111111111111111 ' Blau Led_aktiv(18) = &B11111111111111111111111111111111 ' Rot Rgb_flag = 1 ' Umschaltung auf Muster 2 beim nächsten Aufruf Elseif Rgb_flag = 1 Then Led_aktiv(10) = &B11111111111111111111111111111111 ' Grün Led_aktiv(12) = &B11111111111111111111111111111111 ' Rot Led_aktiv(17) = &B11111111111111111111111111111111 ' Blau Led_aktiv(19) = &B11111111111111111111111111111111 ' Grün Rgb_flag = 2 ' Umschaltung auf Muster 3 beim nächsten Aufruf Else Led_aktiv(11) = &B11111111111111111111111111111111 ' Blau Led_aktiv(12) = &B11111111111111111111111111111111 ' Rot Led_aktiv(16) = &B11111111111111111111111111111111 ' Grün Led_aktiv(20) = &B11111111111111111111111111111111 ' Blau Rgb_flag = 0 ' Umschaltung auf Muster 1 beim nächsten Aufruf End If For C = 9 To 20 Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up52: ' --- NUR LEDS ROT AN For C = 9 To 20 Led_aktiv(c) = &B00000000000000000000000000000000 ' Alle LEDs RGB aus Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next For C = 9 To 18 Step 3 Led_aktiv(c) = &B11111111111111111111111111111111 ' Alle LEDs Rot an Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up53: ' --- NUR LEDS GRUEN AN For C = 9 To 20 Led_aktiv(c) = &B00000000000000000000000000000000 ' Alle Sequenzen RGB aus Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next For C = 10 To 19 Step 3 Led_aktiv(c) = &B11111111111111111111111111111111 ' Alle Sequenzen Gruen an Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up54: ' --- NUR LEDS BLAU AN For C = 9 To 20 Led_aktiv(c) = &B00000000000000000000000000000000 ' Alle LEDs RGB aus Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next For C = 11 To 20 Step 3 Led_aktiv(c) = &B11111111111111111111111111111111 ' Alle LEDs Blau an Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up55: ' --- LAUFLICHT RGB AN For C = 9 To 20 Led_aktiv(c) = &B00000000000000000000000000000000 ' Alle LEDs RGB aus Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Led_aktiv(9) = Led_sequenz(1) ' Lauflichtsequenzen 1-4 für RGB-LEDs laden Led_aktiv(10) = Led_sequenz(2) Led_aktiv(11) = Led_sequenz(3) Led_aktiv(12) = Led_sequenz(2) Led_aktiv(13) = Led_sequenz(3) Led_aktiv(14) = Led_sequenz(4) Led_aktiv(15) = Led_sequenz(3) Led_aktiv(16) = Led_sequenz(4) Led_aktiv(17) = Led_sequenz(1) Led_aktiv(18) = Led_sequenz(4) Led_aktiv(19) = Led_sequenz(1) Led_aktiv(20) = Led_sequenz(2) For C = 9 To 20 Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up56: ' --- ALLE RGB AUS For C = 9 To 20 Led_aktiv(c) = &B00000000000000000000000000000000 Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up61: ' --- ALLE RGB INVERTIEREN For C = 9 To 20 Led_aktiv(c) = Led_aktiv(c) Xor Inv Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up62: ' --- NUR ROT INVERTIEREN For C = 9 To 18 Step 3 Led_aktiv(c) = Led_aktiv(c) Xor Inv Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up63: ' --- NUR GRUEN INVERTIEREN For C = 10 To 19 Step 3 Led_aktiv(c) = Led_aktiv(c) Xor Inv Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up64: ' --- NUR BLAU INVERTIEREN For C = 11 To 20 Step 3 Led_aktiv(c) = Led_aktiv(c) Xor Inv Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up65: ' --- ALLE LEDS LINKS INVERTIEREN For C = 1 To 4 Led_aktiv(c) = Led_aktiv(c) Xor Inv Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up66: ' --- ALLE LEDS RECHTS INVERTIEREN For C = 5 To 8 Led_aktiv(c) = Led_aktiv(c) Xor Inv Ee_sequenz_last(c) = Led_aktiv(c) ' automatische Einstellungsspeicherung Next Return Up67: ' --- ALLE LEDS DIMMEN Dimmermodus = 1 ' Dimmermodus einschalten Cls Locate 1 , 1 Lcd " Dimmermodus" Locate 2 , 1 Lcd " Dimmwert = " Lcd Dimmwert Lcd " " Locate 4 , 1 Lcd "Ende mit Tastendruck" Return Up68: ' --- GESCHWINDIGKEIT ÄNDERN Speedmodus = 1 ' Speedmodus einschalten Cls Locate 1 , 1 Lcd " Speedmodus" Locate 2 , 1 Lcd " Speed = " Lcd Impuls Lcd " " Locate 4 , 1 Lcd "Ende mit Tastendruck" Return '############################################################### ' Unterprogramm Showmodus '############################################################### Up_showmodus: '***** Starteinstellungen Showmodus = 1 Cls Locate 2 , 1 Lcd "-- Automatikmodus --" Locate 4 , 1 Lcd "Ende mit Tastendruck" Disable Int0 ' Interrupt 0 (Drehfunktion des INC) ausschalten Dimmwert = 0 ' Startwert für Dimmwert Ledweiss = Dimmwert ' PWM 1b den aktuellen Dimmwert zuweisen Ledrgb = Dimmwert ' PWM 1a den aktuellen Dimmwert zuweisen Impuls = 75 For Zs = 1 To 8 Led_aktiv(zs) = &B11111111111111111111111111111111 ' Startwert für weiße LEDs Next For Zs = 9 To 20 Led_aktiv(zs) = &B00000000000000000000000000000000 ' Startwert für RGB Next Showablauf = 1 ' Start mit Case 1 Zs = 0 ' Zählvariable für Zeitablauf Gs = 0 ' Globaler Durchlaufzähler für Showmodus '**** Hauptschleife Unterprogramm Do For I = 0 To Sequenz Led1 = Led_aktiv(1).i Led2 = Led_aktiv(2).i Led3 = Led_aktiv(3).i Led4 = Led_aktiv(4).i Led5 = Led_aktiv(5).i Led6 = Led_aktiv(6).i Led7 = Led_aktiv(7).i Led8 = Led_aktiv(8).i Led9 -r = Led_aktiv(9).i Led9 -g = Led_aktiv(10).i Led9 -b = Led_aktiv(11).i Led10 -r = Led_aktiv(12).i Led10 -g = Led_aktiv(13).i Led10 -b = Led_aktiv(14).i Led11 -r = Led_aktiv(15).i Led11 -g = Led_aktiv(16).i Led11 -b = Led_aktiv(17).i Led12 -r = Led_aktiv(18).i Led12 -g = Led_aktiv(19).i Led12 -b = Led_aktiv(20).i Waitms Impuls Select Case Showablauf Case 1 : Gosub Sup1 ' Weiße LEDs langsam hochdimmen Case 2 : Gosub Sup2 ' 3 x Weiß Blinken Case 3 : Gosub Sup3 ' Weiß aus und Rot an Case 4 : Gosub Sup4 ' Wechsel auf Blau Case 5 : Gosub Sup5 ' Wechsel auf Grün Case 6 : Gosub Sup6 ' RGB gemischt an Case 7 : Gosub Sup7 ' Lauflicht weiß links dazu Case 8 : Gosub Sup8 ' Lauflicht links aus und LL rechts an Case 9 : Gosub Sup9 ' Lauflicht rechts aus und LL RGB an Case 10 : Gosub Sup10 ' Lauflicht RGB invertieren Case 11 : Gosub Sup11 ' Lauflicht weiß dazu Case 12 : Gosub Sup12 ' Lauflicht schnell Case 13 : Gosub Sup13 ' Alles voll an Case 14 : Gosub Sup14 ' Alles langsam abdimmen End Select If Showmodus = 0 Then Goto Endshow ' AUSSTIEG aus der Showroutine End If Next Loop Endshow: For C = 1 To 20 Led_aktiv(c) = Ee_sequenz_last(c) Next Dimmwert = Ee_dimmwert ' letzten gespeicherten Dimmwert laden Impuls = Ee_impuls ' letzten gespeicherten Impulswert laden Return '**** Ende Hauptschleife Unterprogramm '***** Ausführungsroutinen für Caseabfrage Showprogramm Sup1: ' --- WEISSE LEDS LANGSAM HOCHDIMMEN Gs = Gs + 1 If Gs < 100 Then Dimmwert = Dimmwert + 15 ' 15er-Schritte zur Eingrenzung des Regelbereiches If Dimmwert > 1023 Then ' Inc-Wert größer als Maximalwert = Begrenzen auf Maximalwert Dimmwert = 1023 End If Ledweiss = Dimmwert ' PWM 1b den aktuellen Dimmwert zuweisen Else ' Ausstieg aus dem Case Gs = 0 ' Globalzähler zurücksetzen Zs = 0 ' Zeilenzähler zurücksetzen Showablauf = 2 ' auf nächsten ShowCase umschalten End If Return Sup2: ' --- 3x WEISS BLINKEN Gs = Gs + 1 If Gs = 10 Then ' nach jedem 10. Durchlauf Dimmwert umschalten If Zs = 0 Then Dimmwert = 0 If Zs = 1 Then Dimmwert = 1023 If Zs = 2 Then Dimmwert = 0 If Zs = 3 Then Dimmwert = 1023 If Zs = 4 Then Dimmwert = 0 If Zs = 5 Then Dimmwert = 1023 Ledweiss = Dimmwert ' PWM 1b den aktuellen Dimmwert zuweisen Zs = Zs + 1 ' Zeilenzähler +1 Gs = 0 ' Globalzähler zurücksetzen End If If Zs = 7 Then ' Ausstieg aus dem Case Zs = 0 ' Zeilenzähler zurücksetzen Gs = 0 ' Globalzähler zurücksetzen Ledrgb = Dimmwert ' PWM 1a den aktuellen Dimmwert zuweisen Showablauf = 3 ' auf nächsten ShowCase umschalten Waitms 500 End If Return Sup3: ' --- WEISS AUS UND ROT AN Gs = Gs + 1 If Gs = 1 Then For Zs = 1 To 20 Led_aktiv(zs) = &B00000000000000000000000000000000 ' Alle LEDs aus Next For Zs = 9 To 18 Step 3 Led_aktiv(zs) = &B11111111111111111111111111111111 ' Alle RGB Rot an Next End If If Gs = 40 Then ' Ausstieg aus dem Case Zs = 0 ' Zeilenzähler zurücksetzen Gs = 0 ' Globalzähler zurücksetzen Showablauf = 4 ' auf nächsten ShowCase umschalten End If Return Sup4: ' --- WECHSEL AUF BLAU Gs = Gs + 1 If Gs = 1 Then For Zs = 1 To 20 Led_aktiv(zs) = &B00000000000000000000000000000000 ' Alle RGB aus Next For Zs = 11 To 20 Step 3 Led_aktiv(zs) = &B11111111111111111111111111111111 ' Alle RGB Blau an Next End If If Gs = 40 Then ' Ausstieg aus dem Case Zs = 0 ' Zeilenzähler zurücksetzen Gs = 0 ' Globalzähler zurücksetzen Showablauf = 5 ' auf nächsten ShowCase umschalten End If Return Sup5: ' --- WECHSEL AUF GRUEN Gs = Gs + 1 If Gs = 1 Then For Zs = 1 To 20 Led_aktiv(zs) = &B00000000000000000000000000000000 ' Alle RGB aus Next For Zs = 10 To 19 Step 3 Led_aktiv(zs) = &B11111111111111111111111111111111 ' Alle RGB Grün an Next End If If Gs = 40 Then ' Ausstieg aus dem Case Zs = 0 ' Zeilenzähler zurücksetzen Gs = 0 ' Globalzähler zurücksetzen Showablauf = 6 ' auf nächsten ShowCase umschalten End If Return Sup6: ' --- RGB GEMISCHT AN Gs = Gs + 1 If Gs = 1 Then For Zs = 1 To 20 Led_aktiv(zs) = &B00000000000000000000000000000000 ' Alle RGB aus Next Led_aktiv(9) = &B11111111111111111111111111111111 ' Rot Led_aktiv(13) = &B11111111111111111111111111111111 ' Grün Led_aktiv(17) = &B11111111111111111111111111111111 ' Blau Led_aktiv(18) = &B11111111111111111111111111111111 ' Rot End If If Gs = 60 Then ' Ausstieg aus dem Case Zs = 0 ' Zeilenzähler zurücksetzen Gs = 0 ' Globalzähler zurücksetzen Showablauf = 7 ' auf nächsten ShowCase umschalten End If Return Sup7: ' --- LAUFLICHT WEISS LINKS DAZU Gs = Gs + 1 If Gs = 1 Then For Zs = 1 To 4 Led_aktiv(zs) = Led_sequenz(zs) ' Lauflichtsequenzen 1-4 für LED 1-4 laden Next End If If Gs = 60 Then ' Ausstieg aus dem Case Zs = 0 ' Zeilenzähler zurücksetzen Gs = 0 ' Globalzähler zurücksetzen Showablauf = 8 ' auf nächsten ShowCase umschalten End If Return Sup8: ' --- LAUFLICHT WEISS LINKS AUS UND WEISS RECHTS AN Gs = Gs + 1 If Gs = 1 Then For Zs = 1 To 4 Led_aktiv(zs) = &B00000000000000000000000000000000 ' Lauflicht für LED 1-4 löschen Next For Zs = 5 To 8 Led_aktiv(zs) = Led_sequenz(zs - 4) ' Lauflichtsequenzen 1-4 für LED 5-8 laden Next End If If Gs = 60 Then ' Ausstieg aus dem Case Zs = 0 ' Zeilenzähler zurücksetzen Gs = 0 ' Globalzähler zurücksetzen Showablauf = 9 ' auf nächsten ShowCase umschalten End If Return Sup9: ' --- LAUFLICHT WEISS RECHTS AUS UND RGB AN Gs = Gs + 1 If Gs = 1 Then For Zs = 5 To 8 Led_aktiv(zs) = &B00000000000000000000000000000000 ' Lauflicht für LED 5-8 löschen Next Led_aktiv(9) = Led_sequenz(1) ' Lauflichtsequenzen 1-4 für RGB-LEDs laden Led_aktiv(10) = Led_sequenz(2) Led_aktiv(11) = Led_sequenz(3) Led_aktiv(12) = Led_sequenz(2) Led_aktiv(13) = Led_sequenz(3) Led_aktiv(14) = Led_sequenz(4) Led_aktiv(15) = Led_sequenz(3) Led_aktiv(16) = Led_sequenz(4) Led_aktiv(17) = Led_sequenz(1) Led_aktiv(18) = Led_sequenz(4) Led_aktiv(19) = Led_sequenz(1) Led_aktiv(20) = Led_sequenz(2) End If If Gs = 60 Then ' Ausstieg aus dem Case Zs = 0 ' Zeilenzähler zurücksetzen Gs = 0 ' Globalzähler zurücksetzen Showablauf = 10 ' auf nächsten ShowCase umschalten End If Return Sup10: ' --- ALLE RGB INVERTIEREN Gs = Gs + 1 If Gs = 1 Then For C = 9 To 20 'RGB Invertieren Led_aktiv(c) = Led_aktiv(c) Xor Inv Next End If If Gs = 60 Then ' Ausstieg aus dem Case For C = 9 To 20 'RGB Invertierung zurücknehmen Led_aktiv(c) = Led_aktiv(c) Xor Inv Next Zs = 0 ' Zeilenzähler zurücksetzen Gs = 0 ' Globalzähler zurücksetzen Showablauf = 11 ' auf nächsten ShowCase umschalten End If Return Sup11: ' --- LAUFLICHT WEISS DAZU Gs = Gs + 1 If Gs = 1 Then For Zs = 1 To 4 Led_aktiv(zs) = Led_sequenz(zs) ' Lauflichtsequenzen 1-4 für LED 1-4 laden Next For Zs = 5 To 8 Led_aktiv(zs) = Led_sequenz(zs - 4) ' Lauflichtsequenzen 1-4 für LED 5-8 laden Next End If If Gs = 60 Then ' Ausstieg aus dem Case Zs = 0 ' Zeilenzähler zurücksetzen Gs = 0 ' Globalzähler zurücksetzen Showablauf = 12 ' auf nächsten ShowCase umschalten End If Return Sup12: ' Lauflichtsequenzen schneller Gs = Gs + 1 If Gs = 1 Then Impuls = 15 ' kleinerer Impulswert erhöht die Durchlaufgeschwindigkeit End If If Gs = 300 Then ' Ausstieg aus dem Case Zs = 0 ' Zeilenzähler zurücksetzen Gs = 0 ' Globalzähler zurücksetzen Impuls = 75 ' Impulswert für Durchlaufgeschwindigkeit zurücknehmen Showablauf = 13 ' auf nächsten ShowCase umschalten End If Return Sup13: ' --- ALLE LEDS AN Gs = Gs + 1 If Gs = 1 Then Ledweiss = 0 ' PWM 1b aus, damit alle LEDs nach Zuweisung gleichzeitig einschalten Ledrgb = 0 ' PWM 1a aus, damit alle LEDs nach Zuweisung gleichzeitig einschalten Waitms 200 For Zs = 1 To 8 Led_aktiv(zs) = &B11111111111111111111111111111111 ' weiße LEDs an Next For Zs = 9 To 20 Led_aktiv(zs) = &B00000000000000000000000000000000 ' Alle RGB aus, damit nur ausgewählte Farben eingeschaltet werden Next Led_aktiv(9) = &B11111111111111111111111111111111 ' Rot Led_aktiv(13) = &B11111111111111111111111111111111 ' Grün Led_aktiv(17) = &B11111111111111111111111111111111 ' Blau Led_aktiv(18) = &B11111111111111111111111111111111 ' Rot Ledweiss = 1023 ' PWM 1b alle LEDs gleichzeitig einschalten Ledrgb = 1023 ' PWM 1a alle LEDs gleichzeitig einschalten End If If Gs = 10 Then ' Ausstieg aus dem Case Zs = 0 ' Zeilenzähler zurücksetzen Gs = 0 ' Globalzähler zurücksetzen Showablauf = 14 ' auf nächsten ShowCase umschalten Dimmwert = 1023 ' Startwert für Abdimmen setzen Ledweiss = Dimmwert ' PWM 1b den aktuellen Dimmwert zuweisen Ledrgb = Dimmwert ' PWM 1a den aktuellen Dimmwert zuweisen End If Return Sup14: ' --- ALLE LEDS LANGSAM ABDIMMEN Gs = Gs + 1 If Gs < 100 Then If Dimmwert > 0 Then Dimmwert = Dimmwert - 25 ' 25er-Schritte zur Eingrenzung des Regelbereiches If Dimmwert < 25 Then ' Inc-Wert größer als Maximalwert = Begrenzen auf Maximalwert Dimmwert = 0 End If End If Ledweiss = Dimmwert ' PWM 1b den aktuellen Dimmwert zuweisen Ledrgb = Dimmwert ' PWM 1a den aktuellen Dimmwert zuweisen End If If Gs = 100 Then ' Ausstieg aus dem Case Gs = 0 ' Globalzähler zurücksetzen For Zs = 9 To 20 Led_aktiv(zs) = &B00000000000000000000000000000000 ' Alle RGB LEDs aus, definierter Startwert für erneuten Durchlauf Next Zs = 0 ' Zeilenzähler zurücksetzen Showablauf = 1 ' auf ersten ShowCase umschalten End If Return '############################################################### ' Interrupt Service Routine A '############################################################### Inc_geber_isr_a: ' Abfrage des Drehreglers If Speedmodus = 0 Then If Dimmermodus = 0 Then ' ZEILENANZEIGE ÄNDERN If B = 1 Then ' B-Wert LOW während der steigenden A-Flanke = Rechtsdrehung If Zeile < 70 Then ' Inc-Zeilenwert kleiner als Maximalwert = +1 Incr Zeile If Zeile = 15 Then Zeile = 14 ' letzten Eintrag der Verzeichnisse in der Mitte halten If Zeile = 30 Then Zeile = 29 If Zeile = 35 Then Zeile = 34 If Zeile = 45 Then Zeile = 44 If Zeile = 58 Then Zeile = 57 If Zeile = 70 Then Zeile = 69 End If Else ' B-Wert High während der steigenden A-Flanke = Linksdrehung If Zeile > 0 Then ' Inc-Zeilenwert größer als 0 = -1 Decr Zeile If Zeile = 60 Then Zeile = 61 ' ersten Eintrag der Verzeichnisse in der Mitte halten If Zeile = 50 Then Zeile = 51 If Zeile = 40 Then Zeile = 41 If Zeile = 30 Then Zeile = 31 If Zeile = 20 Then Zeile = 21 If Zeile = 10 Then Zeile = 11 End If End If Auswahl = 0 ' Menue Ändern sperren Else ' DIMMERWERT ÄNDERN If B = 1 Then ' B-Wert LOW während der steigenden A-Flanke = Rechtsdrehung If Dimmwert < 1023 Then ' wenn Dimmwert kleiner als Maximalwert = +45 Dimmwert = Dimmwert + 45 ' 45er-Schritte zur Eingrenzung des Regelbereiches If Dimmwert > 1023 Then ' Inc-Wert größer als Maximalwert = Begrenzen auf Maximalwert Dimmwert = 1023 End If End If Else ' B-Wert High während der steigenden A-Flanke = Linksdrehung If Dimmwert > 0 Then ' wenn Dimmwert größer als Minimalwert = -45 Dimmwert = Dimmwert - 45 ' 45er-Schritte zur Eingrenzung des Regelbereiches If Dimmwert < 45 Then ' Dimmwert kleiner als Minimalwert = Begrenzen auf Minimalwert Dimmwert = 0 End If End If End If Locate 2 , 14 'Anzeige des Dimmwertes im LCD Lcd Dimmwert Lcd " " End If Else ' GESCHWINDIGKEITSREGELUNG If B = 1 Then ' B-Wert LOW während der steigenden A-Flanke = Rechtsdrehung If Impuls > 10 Then ' wenn Dimmwert größer als Minimalwert = -10 Impuls = Impuls - 10 ' 10er-Schritte zur Eingrenzung des Regelbereiches If Impuls < 10 Then ' Dimmwert kleiner als Minimalwert = Begrenzen auf Minimalwert Impuls = 10 End If End If Else ' B-Wert High während der steigenden A-Flanke = Linksdrehung If Impuls < 1023 Then ' wenn Impuls kleiner als Maximalwert = +1 Impuls = Impuls + 10 ' 10er-Schritte zur Eingrenzung des Regelbereiches If Impuls > 1000 Then ' Inc-Wert größer als Maximalwert = Begrenzen auf Maximalwert Impuls = 1000 End If End If End If Locate 2 , 12 'Anzeige des Impulswertes im LCD Lcd Impuls Lcd " " End If Return '############################################################### ' Interrupt Service Routine B '############################################################### Inc_geber_isr_b: ' Abfrage des Tasters If Standby = 1 Then ' STAND BY AUSSCHALTEN Enable Int0 ' Interrupt 0 (Drehfunktion des INC) wieder einschalten Zeile = 21 ' Rücksprung ins Menü Ledweiss = Dimmwert ' PWM 1b weisse LEDs mit altem Dimmwert einschalten Ledrgb = Dimmwert ' PWM 1a RGB LEDs mit altem Dimmwert einschalten Standby = 0 ' Flag für Standby ausschalten Lcd_backlight = 1 ' LCD-Backlight wieder einschalten Gosub Lcd_anzeige ' Normale LCD-Anzeige wieder einstellen Elseif Dimmermodus = 1 Then ' DIMMERMODUS AUSSCHALTEN Dimmermodus = 0 ' Flag für Dimmermodus zurücksetzen Ee_dimmwert = Dimmwert ' neuen Dimmerwert speichern Zeile = 67 ' Rücksprung ins Menü Gosub Lcd_anzeige ' Normale LCD-Anzeige wieder einstellen Elseif Showmodus = 1 Then ' SHOWMODUS AUSSCHALTEN Showmodus = 0 ' Flag für Showmodus zurücksetzen Dimmwert = Ee_dimmwert ' letzten Dimmwert laden Ledweiss = Dimmwert ' PWM 1b den aktuellen Dimmwert zuweisen Ledrgb = Dimmwert ' PWM 1a den aktuellen Dimmwert zuweisen Impuls = Ee_impuls ' letzte Geschwindigkeit laden Enable Int0 ' Interrupt 0 (Drehfunktion des INC) wieder einschalten For C = 1 To 20 Led_aktiv(c) = Ee_sequenz_last(c) ' letztes Anzeigemuster laden Next Elseif Speedmodus = 1 Then ' SPEEDMODUS AUSSCHALTEN Speedmodus = 0 ' Flag für Speedmodus zurücksetzen Ee_impuls = Impuls ' neuen Impulswert speichern Zeile = 68 ' Rücksprung ins Menü Gosub Lcd_anzeige ' Normale LCD-Anzeige wieder einstellen Else Auswahl = 1 ' Menue Ändern freigeben End If Return '############################################################### ' Unterprogramm LCD-Anzeige ändern '############################################################### Lcd_anzeige: Titel = Zeile / 10 ' Titel berechnen Locate 1 , 1 Lcd Lookupstr(titel , Data_menue) ' Titel anzeigen R = Zeile - 1 ' Hilfsvariable für Anzeige 2. Zeile Locate 2 , 1 Lcd " " Lcd Lookupstr(r , Data_menue) ' vorhergehenden Menuepunkt anzeigen Locate 3 , 1 Lcd Chr(0) ; Chr(0) ; Chr(1) ' Pfeil für Auswahlmarkierung in 3. Zeile Lcd Lookupstr(zeile , Data_menue) ' aktuellen Menuepunkt anzeigen R = Zeile + 1 ' Hilfsvariable für Anzeige 4. Zeile Locate 4 , 1 Lcd " " Lcd Lookupstr(r , Data_menue) ' nachfolgenden Menuepunkt anzeigen Return Data_menue: Data "" , "----Startmenue------" , "----Hauptmenue------" , "----Menue Links-----" , "----Menue Rechts----" , "----Menue RGB-------" , "Menue INV-DIMM-SPEED" , " " , " " , " " , " " Data "Neue Szenerie " , "Letzte Szenerie " , "Alles An " , "Showstart " , " " , " " , " " , " " , " " , " " Data "Stand By An/Aus " , "Alles Voll An " , "Alles Lauflicht " , "Alles Aus " , "Buehne Links " , "Buehne Rechts " , "RGB " , "Showstart " , "INV-Dimmer-Speed " , " " Data "Alles An " , "Lauflicht " , "Links Aus " , "Hauptmenue " , " " , " " , " " , " " , " " , " " Data "Alles An " , "Lauflicht " , "Rechts Aus " , "Hauptmenue " , " " , " " , " " , " " , " " , " " Data "Gemischt AN " , "Nur Rot AN " , "Nur Gruen AN " , "Nur Blau AN " , "Lauflicht " , "RGB Aus " , "Hauptmenue " , " " , " " , " " Data "RGB INV " , "Rot INV " , "Gruen INV " , "Blau INV " , "Buehne Links INV " , "Buehne Rechts INV" , "LEDs dimmen " , "Geschwindigkeit " , "Hauptmenue " , " "