INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> Das ist nun mein testprogramm, aber wie mache ich das nun, das wenn ich schaltert1 (port7) betätige das dann led3/oder 4 für einen gewissen zeitraum unterbrochen werden. (vibrationssicherheitsschalter) Das heisst, die Unterbrechung soll über mehrere "Zyklen" hinweg erfolgen, wenn wir einen Durchlauf von #loop bis goto loop mal als einen Zyklus bezeichnen? Oder nur innerhalb eines Zyklus Ist denn die Betätigung von Schalter1 eher kurz oder eher lang? Muss man zu jedem Zeitpunkt innerhalb eines Zyklus die Betätigung abtesten, oder reicht es, pro loop einmal zu prüfen? Erfolgt die Betätigung von Schalter1 vielleicht nur zu bestimmten Zeitpunkten? Ein Zyklus dauert ja ca. 20 Sekunden wenn ich richtig gerechnet habe. Wie lange kann denn zwischen Lösen von Schalter1 und erneutem Drücken vergehen? Soll dann die "gewisse Zeit" in jedem Fall erneut gestartet werden? Was ist, wenn die "gewisse Zeit" inmitten der Zeit abläuft, wo LED3 oder 4 normalerweise leuchten würden? Sollen die dann für den Rest der regulären Zeit noch kurz leuchten? Kann die "reguläre Zeit" kürzer sein als die von "pause 200" abgedeckten 4 Sekunden? Kann also LED3 und 4 quasi blinken? Sorry, aber eine allgemeine Lösung ist oft unnötig kompliziert, wenn durch ein paar Rahmenbedingungen die Sache wesentlich vereinfacht werden kann. Im Prinzip musst Du jede pause 200 ersetzen durch so was wie: start = timer #loopX if NOT (NOT schalter1Old and schalter1) then goto loopXCont ' Flankenwechsel low -> high schalter1Old = ON ' Wechsel erkannt schalter1Timer = timer schalter1TimerRunning = ON #loopXCont if NOT (schalter1Old and NOT schalter1) then goto loopXCont1 ' Flankenwechsel high -> low schalter1Old = OFF ' Wechsel erkannt #loopXCont1 if abs(start - timer) <= 200 then goto loopX mit den X in loopX durchlaufend nummeriert oder einem entsprechends gosub und die Stelle z. B. bei LED3 durch start = timer #loopX if NOT (NOT schalter1Old and schalter1) then goto loopXCont ' Flankenwechsel low -> high ... ' wie oben if schalter1TimerRunning then goto TimerRunning led3 = ON goto Check200 #TimerRunning if NOT (abs(schalter1Timer - timer) > gewisseZeit) then goto check200 TimerRunning = OFF #check200 if abs(start - timer) <= 200 then goto loopX Das nur als grobe Skizze, die sicher noch diverser Deklarationen bedarf und vielleicht auch Fehler enthält. Wie Du vielleicht an Manfreds Website gesehen hast, ist eine allgemeine Lösung für Parallelverarbeitung nicht so ganz trivial, und für Einsteiger nicht unbedingt geeignet. Bye Achim |
Antwort schreiben |