Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: zeitschaltprogramm Kategorie: Programmierung Basic (von Achim - 26.08.2005 1:13)
 Als Antwort auf Re: zeitschaltprogramm von hecktor - 25.08.2005 11:06
Achim nutzt:  CC1-Station V1.1

> 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

Bisherige Antworten:

Re: zeitschaltprogramm (von hecktor - 26.08.2005 14:52)