Tasten wir uns mal ran. Ich hab immer noch nicht verstanden, was im Datail unbefriedigend ist und hab einfach mal was gemacht. Kennst das, was von Planung über Entwicklung, Fabrikation, Lieferung und Montage am Ende übrig bleibt?
Nicht getestet aber sollte so sein:
Auswahl Szenario wie gehabt.
Am Ende der Auswahl bei Taster loslassen werden die Relais(Leds) nicht abgeschaltet, aktuelles Szenario bleibt an.
Mit folgendem kurzem Tastendruck wird dann abgeschaltet.
Mit weiterem kurzen Tastendruck wird vorhergehendes Szenario wieder eingeschaltet.
Hab noch ein Case für den kuzen Tastendruck eingefügt und das Abschalten der LedX am Ende rausgenommen. - Dieses Case wieder entfallen nach Update. Kurzer Tastendruck wird am Ende abgefragt.
PS. Ohhh schon Fehler entdeckt - Update kommt später
Update gemacht
Code:'################################### '### Bascom Demoversion V2.0.7.5 ### '################################### $regfile = "m168def.dat" $framesize = 32 $swstack = 32 $hwstack = 34 $crystal = 16000000 Dim Hundertstelsekunden As Word 'enthält Tastendrucklänge in Hundertstel Sekunden Dim Ledspeicher As Byte 'Speichert Zustand der LEDs in einzelnen Bits Const Led_1 = 0 'Zum Adressieren der Bits in Ledspeicher Const Led_2 = 1 'Zum Adressieren der Bits in Ledspeicher Const Led_3 = 2 'Zum Adressieren der Bits in Ledspeicher Portd.4 = 1 'Pullup an PD4 einschalten Taster Alias Pind.4 'Taster an PD4 Led1 Alias Portc.0 'Anschluß für LED1 ? Led2 Alias Portc.1 'Anschluß für LED2 ? Led3 Alias Portb.3 'Anschluß für LED3 ? Config Led1 = Output Config Led2 = Output Config Led3 = Output Do 'Hauptschleife Debounce Taster , 0 , Taste_gedrueckt , Sub 'Wenn Tasteranschluß auf 0 (low) -> Subroutine Taste_gedrueckt 'Debounce hat bei Aktivität auf dem PIN ca. 25ms Verzögerung Loop 'Ende Hauptschleife Taste_gedrueckt: 'Unterprogram wird angesprungen, wenn Taste gedrückt wurde Hundertstelsekunden = 0 'initialisieren für Zeitmessung While Taster = 0 'Solange Taster gedrückt ist... Waitms 10 '0,01s Zeitmeßschritte Incr Hundertstelsekunden 'alle 10ms erhöhen Select Case Hundertstelsekunden 'Hundertstelsekunden enthält Länge des Tastendruckes in Hundertstelsekunden Case 20 To 69 : Ledspeicher = Bits(led_1) 'Taste zwischen 200ms und <700ms gedrückt Case 70 To 119 : Ledspeicher = Bits(led_2) 'Taste zwischen 700ms und <1200ms gedrückt Case 120 To 169 : Ledspeicher = Bits(led_3) Case 170 To 219 : Ledspeicher = Bits(led_1 , Led_2) Case 220 To 269 : Ledspeicher = Bits(led_1 , Led_3) Case 270 To 319 : Ledspeicher = Bits(led_2 , Led_3) Case 320 To 369 : Ledspeicher = Bits(led_1 , Led_2 , Led_3) Case 370 : Hundertstelsekunden = 19 'Taste 3,7s und länger gedrückt-> Auswahl Lichtszenario beginnt neu End Select if Hundertstelsekunden >= 20 then 'wenn Selektion, dann Leds entsprechend einschalten Led1 = Ledspeicher.Led_1 Led2 = Ledspeicher.Led_2 Led3 = Ledspeicher.Led_3 end if Wend if Hundertstelsekunden < 20 then 'wenn Taste nur kurz gedrückt wurde ... If Led1 = 1 or Led2 = 1 or Led3 = 1 then 'und irgendeine Led eingeschaltet ist Led1 = 0 'dann alle ausschalten Led2 = 0 Led3 = 0 else 'oder gespeichertes Szenario einschalten. Led1 = Ledspeicher.Led_1 Led2 = Ledspeicher.Led_2 Led3 = Ledspeicher.Led_3 end if end if Return 'zurück zur Hauptschleife End 'end program








Zitieren
Lesezeichen