Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo, > danke für die Antwort, kann aber noch nicht ganz folgen...ich warte auf eine steigende Flanke > oder einen kurzen Impuls und setzte mein "busy". Das "busy" schaltet dann über die Funktion > "light()" das Licht ein, und der der Timeout-Timer startet. I.d.R kommt aber direkt nach der > steigenden Flanke die fallende Flanke. Dadurch wird der Timer für die Ausschaltverzögerung > gestartet. Das geschieht über detect=1. Wenn jetzt aber die steigende Flanke nur > über den Impuls erkannt wird, dann gibt es keine fallende Flanke und ich warte bis in alle Ewigkeit. > Also, irgendwie kann ich noch nicht folgen mit dem "Verodern" Hier mal der Code: > <code> > thread Monitoring > /******************************************************************************/ > /* IR-Port-Überwachung */ > /******************************************************************************/ > { > run 100; > wait (ports.get(ir) or ports.getcount(ir)>0) and !busy; //warten auf Unterbrechung > t1=system.timer(); //Zeitpunkt der steigenden Flanke in Variablen > busy=1; > wait !ports.get(ir)and busy; //warten auf Freigabe > t2=system.timer(); //Zeitpunkt der fallenden Flanke in Variablen > ports.getcount(ir); //Zähler am Port zurücksetzen > busy=0; > detect=1; //Impuls erkannt! > } > ... > function light () > { > ...... > } > if global.t2<=0 //nur wenn Timer 2 inaktiv > { > if ((check.Night() and(reed.busy or ir.busy)) or schalter.Read(0,1)) > { > time.Reset(1); //Timer zurücksetzten > global.set=1; //Licht "an" setzten > } > if check.Night() > if reed.detect or ir.detect //fallende Flanke an IR oder Reed > global.t1=global.timer1; //Timer 1 nur bei Nacht starten > reed.detect=0; //Flag zurücksetzetn > ir.detect=0; > } > if global.tflag1 or global.tflag2 or(!schalter.Read(0,1) and schalter.flag[0]) > { > time.Reset(1); > time.Reset(2); > global.set=0; //Licht "aus" setzen > schalter.Reset(0); > } > > if global.set > { > hsrel8.On(hsrel8.aussenlicht); > } > else > { > hsrel8.Off(hsrel8.aussenlicht); > } > } > </code> > > Gruß, > ChristianS. > > > > > > > Hallo, > > > ich habe die Sache jetzt umgestrickt und es funzt auch zu 98% ganz gut. Das fuchst micht > > > natürlich, da 100% das Ziel ist und es doch noch vorkommt, dass man durch die IR geht und > > > das Licht nicht einschaltet.Deshalb geht mir die Sache mit dem Zähler nicht aus dem Sinn. > > > Der ist so rattenschnell, dass selbst ein Schuss durch den Lichtstrahl, z.B. aus einer Schleuder, > > > erkannt wird. Das hätte ich nicht gedacht. > > > > > > Allerdings kann ich das in der Form nicht gebrauchen, da ich auf "fallende" und "steigende" > > > Flanke reagieren muss.. > > > Das Licht wird bei einer High-Flanke einschaltet,und bei der Low-Flanke starten ein Timer > > > der die Ausschaltverzögerung bestimmt. Da kann ich mit einem Zählimpuls erstmal nichts anfangen. > > > Außerdem messe ich noch die Zeit zwischen "High" und "Low"-Flanke, da der Lichtstrahl auch > > > unerwünscht unterbrochen werden kann, wenn z.B. Gegenstände dazwischengestellt werden, > > > oder, wie im letzten Winter, der Schnee zu hoch wird. Dann soll es später einen Timeout geben > > > und das Licht geht so lange aus, bis der Fehler behoben ist. Zusätzlich zur IR, gibt es einen > > > Reed-Kontakt an der Haustür (reed) und einen Schalter (ist ein Taster, deshalb schalter.flag) > > > der das Licht schaltet. > > > > Hallo Christian, > > so wie jetzt dein Problem verstehe reicht es doch wenn du die beiden Sachen "veroderst"... > > => bei sehr kurzen Impulsen Zählt dein Zähler => Licht für die entsprechende Zeit ein > > ODER > > => bei erkannten Flanken => Licht ein > > > > Bei blockierter LS kein Zähler und keine fallende Flanke... => kein Licht... > > > > > > nitraM