Re: Stack Overflow Kategorie: Programmierung (von Karl - 6.12.2011 19:06) | ||
Als Antwort auf Re: Stack Overflow von nitraM - 5.12.2011 11:36 | ||
| ||
Okay hier der code... bestehend aus 3 Modulen, zunächste das mainmodule: byte min, tim; int button; thread eins { button=stkeyb.get(); //function input(byte maxziff, long default, long timeout) returns long if button == 10 { halt zeitschaltuhr.relaiseins; stports.togRel(1); min= system.hour(); wait min == system.hour()+1; resume zeitschaltuhr.relaiseins; } } thread zwei { button=stkeyb.get(); //function input(byte maxziff, long default, long timeout) returns long if button == 11 { halt zeitschaltuhr.relaiszwei; stports.togRel(2); tim= system.minute(); wait tim == system.minute()+10; resume zeitschaltuhr.relaiszwei; } } thread drei { min=system.second(); button=stkeyb.get(); //function input(byte maxziff, long default, long timeout) returns long if button == 12 { stports.togLCDlight(); sleep 300; } } thread main { stports.LCDlight(1); byte knopf, temp; int a, b, c; long timeset; lcdext.init(); lcdext.clear(); lcdext.print("ZEIT EINSTELLUNG"); lcdext.line(2); lcdext.print("BITTE EINGEBEN"); sleep 2000; lcdext.clear(); lcdext.print(" STUNDE "); sleep 2000; lcdext.clear(); timeset=stkeyb.input (2, 2, 5000); a=timeset; lcdext.clear(); lcdext.print(" MINUTEN "); sleep 2000; lcdext.clear(); timeset=stkeyb.input (2, 2, 5000); b=timeset; c=00; system.settime(a, b, c); lcdext.clear(); lcdext.print("DATE EINSTELLUNG"); lcdext.line(2); lcdext.print("BITTE EINGEBEN"); sleep 2000; lcdext.clear(); lcdext.print(" JAHR "); sleep 2000; lcdext.clear(); timeset=stkeyb.input (4, 4, 5000); a=timeset; lcdext.clear(); lcdext.print(" MONAT NUMMER "); sleep 2000; lcdext.clear(); timeset=stkeyb.input (2, 2, 5000); b=timeset; lcdext.clear(); lcdext.print(" TAG "); sleep 2000; lcdext.clear(); timeset=stkeyb.input (2, 2, 5000); c=timeset; lcdext.clear(); system.setdate(a, b, c); lcdext.clear(); sleep 2000; lcdext.print("DATE AND TIME"); lcdext.line(2); lcdext.print("ERFOLGREICH"); sleep 2000; lcdext.clear(); run zeit_anzeige.Zeit; run zeitschaltuhr.Zeitschaltuhr; run zeitschaltuhr.relaiseins; run zeitschaltuhr.relaiszwei; run eins; run zwei; run drei; halt; } dann zweites das Zeit anzeige Modul: thread Zeit {byte second; stports.init(); lcdext.init(); lcdext.print(" AQUARIUM "); lcdext.line(2); lcdext.print(" STEUERUNG "); sleep 1000; lcdext.clear(); loop { second=system.second(); lcdext.line(1); lcdext.time(1); lcdext.line(2); lcdext.date(1); sleep 500; lcdext.goto(1,2); lcdext.put(' '); lcdext.goto(1,5); lcdext.put(' '); wait second!=system.second();//Auf Sekundenwechsel warten } } und zu guterletzt, das Zeitschaltuhr Modul: byte ZSU[1], ZSSU[1], flag; // Anzahl der Zeitschaltuhren beginnend mit '0' !!! thread Zeitschaltuhr { byte min, day, Nr, No; int time; min = system.minute(); wait system.minute() != min; time=system.hour()*100 + system.minute(); day=system.dow(); capture flag; //-------------------- Zeitschaltuhr (ZSU) 0 -------------------- Nr = 0; // Zeitschaltuhr (ZSU) Nr. // Es wird jeden Tag geschaltet if time >= 700 and time < 1200 or time >= 1500 and time < 2145 // zwischen 6:00 und 22:00 //or time>= 1328 and time < 1329 ZSU[Nr] = 1; // EIN else ZSU[Nr] = 0; // AUS //-------------------- Zeitschaltuhr (ZSU) 0 Ende -------------------- //-------------------- Zeitschaltuhr (ZSU) 1 -------------------- No = 0; // Zeitschaltuhr (ZSU) Nr. // Es wird jeden Tag geschaltet if time >= 700 and time < 745 or time>= 830 and time < 1000 // zwischen 6:00 und 22:00 or time>= 1200 and time < 1330 or time>= 1430 and time < 1530 or time>= 1830 and time < 1945 or time>= 2030 and time < 2130 ZSSU[No] = 1; // EIN else ZSSU[No] = 0; // AUS release; } //-------------------- Zeitschaltuhr (ZSU) 1 Ende -------------------- thread relaiseins { capture flag; if ZSU[0] == 1 // WENN Zeitschaltuhr '0' EIN { stports.setRel (1,1); //anschalten Relais 0 } else { stports.setRel (1,0); //auschschalten Relais 0 } release; } thread relaiszwei { capture flag; if ZSSU[0] == 1 // WENN Zeitschaltuhr '1' EIN { stports.setRel (2,1); //anschalten Relais 1 } else { stports.setRel (2,0); //auschschalten Relais 1 } release; } Bei dem hats auch schon zu problemen geführt, wenn ich mit einem Array arbeite und (beispielsweise ZSU[1]) damit schalten will, dann geht das irgendwie nicht... Hoffe der Code hilft euch... BTW: die Funktionen zur manuellen Bedienung funktionieren, aber danach spinnt das ganze System und die Steuerung macht irgenwie was sie will... Liebe Grü�e Karl > Hallo Karl, > einen Stackoverflow hatte ich noch nicht, aber wie schaut denn dein Programm aus? > Vieleicht stellst du es einfach mal hir ein... > > nitraM > > > > > > Hallo an alle, > > > > wollte mal fragen ob auch andere schon mit dem Stack overflow zu kämpfen hatten. Habe bei meinen > > Programmen wenn ich sie testweise ausführe schon öfters einen Stackoverflow bekommen. > > Je öfter ich dann das Programm simulieren will desto höher ist die ebene die angezeigt wird, > > also z.B. Stack overflow (ebene 1). > > Habe das gefühl, dass das sehr zufällig und sporadisch auftaucht. Finde nämlich nicht, dass mein > > Programm da jetzt zu gro� ist. Schalte im Prinzip nur relais zeitgesteuert, dann habe ich display > > ansteuerung vom licht und eine manuelle schaltmöglichkeit(die aber noch nicht so wirklich > > klappt). > > Hatte das hier schonmal jemand? > > > > Grü�e > > > > Karl | ||
Antwort schreiben Antworten: Re: Stack Overflow (von André H. - 6.12.2011 20:45) Re: Stack Overflow (von Karl - 7.12.2011 0:25) Re: Stack Overflow (von nitraM - 8.12.2011 9:11) Re: Stack Overflow (von Rene Schulz - 2.01.2012 22:15) Re: Stack Overflow (von André H. - 3.01.2012 1:47) |