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 Leute, > > > > > > > > ist es mit folgendem code möglich eine Zeitschaltuhr zu | > > > > Programmieren, oder mache ich hier etwas grundsätzlich falsch? > > > > > > > > Wenn ja wäre es nett wenn mir jemand hilft. > > > > > > > > Viele Dank > > > > Gruß Rene > > > > > > > > <code> byte ZSUR; > > > > > > > > thread schaltuhr1 > > > > { > > > > byte sek, min, day, Nr; > > > > int time; > > > > > > > > min = system.minute(); > > > > wait system.minute() != min; > > > > time=system.hour()*100 + system.minute(); > > > > day=system.dow(); > > > > > > > > if time >= 8000000 and time < 8000030 > > > > // zwischen 08:00:00 und 08:00:30 > > > > // nicht über Tageswechssel schalten > > > > > > > > ZSUR = 1; // EIN > > > > else > > > > ZSUR = 0; // AUS > > > > } </code> > > > > > > > > Ich habe diese Schaltuhr im net gefunden, sie ist | > > > > ursprünglich von Malte Alpers und ich versuche sie | > > > > für mich umzuschreiben oder anzupassen. > > > > > > > > > > > > Sekunden genaues Schalten Nein. > > > > > > Dein Thread wird blos einmal die Minute abgearbeitet. Theoretisch zumindest, praktisch müsstet > > > Du noch bei jeden Durchgang die Vari min wieder gleichsetzen, aber bei genauer Betrachtung wird > > > die Vari min sowieso immer neu gestartet. Da fehlt noch ein Loop. > > > > > > Also so kann es nicht funktionieren, brauchst Du jetzt eine Zeitschaltuhr für Schaltvorgänge > > > im Minuten oder Sekundenbereich? > > > > > > Rene > > > > Danke schon mal für Deine Antwort, > > > > ich benötige eine im Sekundenbereich, diese soll für 30 | > > Sekunden Laufen und dann wieder Abschalten, das ganze 2 | > > mal am Tag zu einer vorher definierten Zeit. > > > > Ist für eine Beregnungsanlage im Terrariumbereich. > > > > Gruß Rene > > > Hallo Rene, > > ich habe in meiner Rolladensteuerung auch eine Timerroutine von Malte Alpers verwendet > ( von mir auf 16 Timer erweitert), damit kannst Du genaue Schaltvorgänge steuern: > > <code> > /* Geändert : 25. Juni 2005 Malte Alpers (malte.alpers@gmx.de) */ > /* Geändert : 16 Timer, 5.Mai 2008 Jörg Hansen(joerg@hansen-leinesser.de) */ > /* Getestet : ja */ > /* Benötigt : math.c2; constant.c2 */ > /* Bemerkungen: Function verwaltet 16 Timer (Nummer 0...15) */ > /* Kann für allgemeine Verzögerungesaufgaben verwendet werden */ > /****************************************************************************/ > /* Universaltimer auf Basis des Systemtimers im Millisekundentakt */ > /* */ > /* Rückgabewert=timerstatus */ > /* */ > /* Parameter: */ > /* num.......timernummer */ > /* start.....wenn gesetzt, wird startzeit gespeichert */ > /* res.......setzt status auf 0 */ > /* time......Laufzeit in Millisekunden */ > /****************************************************************************/ > > long t[15]; //speicher für startzeit > int state[15]; //speicher für status > > function t_v(int num,int start,int res,long time) returns int > { > long t1,t2; > t1=system.timer(); //aktuelle zeit speichern > if start > { //wenn start gesetzt, zeit speichern > t[num]=t1; //und status setzen > state[num]=constant.ON; > } > t2=math.labs(t1-t[num]); //absolutdifferenzbildung > if t2 > time state[num]=constant.OFF; //zeitüberprüfung > > if res state[num]=constant.OFF; //reset wenn res > return state[num]; > } > </code> > > > Hier noch die Aufrufe beim Starten (z.B. mittels Tastendruck): > > <code> > > if (tastenvorzustand[i] == 0) and(tastenzustand[i] == 1) and (relaiszustand[i]== 0) // Taste rauf betätigt > { > rollladenrelais(i,1); //Rollladenrelais rauf einschalten > timer.t_v(i,-1,0,Laufzeitrauf[i]); // Timer starten > relaiszustand[i] =1; // merken das das Relais angesteuert ist > tastenvorzustand[i] = 1; // Tastenzustand in Vorzustand übernehmen > break; > } > > </code> > > ... sowie ein Codeausschnitt der Schleife zur Abfrage des Timerablaufs: > (geht natürlich auch als eigener Thread, den man stoppen kann solange kein Timer gestartet ist) > <code> > loop > { > //prüfen ob ein Timer abgelaufen ist > for i = 0...maxRollladen > { > if (relaiszustand[i]== 1) > { if !(timer.t_v(i,0,0,Laufzeitrauf[i])) > { timer.t_v(i,0,-1,0); //timer stoppen > relaiszustand[i] = 0; // Relaiszustand AUS merken > rollladenrelais(i,0); //Rolladenrelais ausschalten > }; > }; > }; > }; > </code> > > > Laufzeitrauf[] ist ein globales Konstantenarray z.B. 20000 für 20 Sekunden : > <code> > const Laufzeitrauf[] = 20000, 20000, 20000, 20000, 27000, 27000; // Laufzeitdefinition je Rolladen > const Laufzeitrunter[] = 18500, 18000, 19000, 18000, 23500, 17000; // Laufzeitdefinition je Rolladen > </code> > > > Ich hoffe damit kommst Du weiter > > Viele Grüße Jörg