menue+eigene threads Kategorie: Programmierung (von dirk - 5.08.2009 0:03) | ||
| ||
hallo, moechte ein kleines demoprog. zur verfügung stellen. darin sind eigene quasi-threads vorhanden. eine menuefuehrung wird mit einer variablen umgesetzt. für verbesserungen oder hinweise waere ich dankbar. :-) //****************************************************************************** //hier können globale var's def. werden int i; //****************************************************************************** function temp12() //returns int { //locale var's string s1,s2,s3,s4,s_out; float U1,U2,U3,R1,R2,R3,T1,T2,T3; lcdext.clear(); s1=""; U1=0.004*ports.adc(0); R1=5/U1-1; T1=1000/(math.ln(R1)/3.435+1000/298)-275;//-273 if (T1 > 26) ports.set(14,1); if (T1 < 25) ports.set(14,0); s2=""; U2=0.0049*ports.adc(1); R2=5/U2-1; T2=1000/(math.ln(R2)/3.435+1000/298)-274;//-273 if (T2 > 28) ports.set(15,1); if (T2 < 27) ports.set(15,0); s3=""; U3=0.004*ports.adc(2); R3=5/U3-1; T3=1000/(math.ln(R3)/3.435+1000/298)-274;//-273 str.putfloatf(s1,T1,1); str.putfloatf(s2,T2,1); str.putfloatf(s3,T3,1); /*s_out=s1+";"+s2+";"+s3; hwcom.send(s_out,str.length(s_out)); hwcom.put(10); hwcom.put(13);*/ /*plm.beep(plm.TONE_DIS1); sleep 100; plm.beep(plm.TONE_OFF);*/ s1="INN-TEMP :"+s1+" C"; s2="OUT-TEMP :"+s3+" C"; s3="DCF-ERR."; lcdext.print(s1); lcdext.goto(1,0); lcdext.print(s2); lcd.goto(0,0); lcd.print(s3,str.length(s3)); lcd.goto(1,0); str.putint(s4,system.dcferr()); lcd.print(s4,str.length(s4)); /*lcd.goto(1,0); lcd.print(s3,str.length(s3));*/ lcd.clreol(); i=0; //return system.second(); //return system.timer(); //systemtimer wird jede 1ms um 1erhöht } //****************************************************************************** function clock() //returns int { string std, min, sec,monat,tag,jahr,s; int second; lcdext.clear(); lcdext.goto(0,0); tag=""; str.putintf(tag,system.day(),2); monat=""; str.putintf(monat,system.month(),2); jahr=""; str.putintf(jahr,system.year(),2); //s=""; s="DATE :"+tag+":"+monat+":"+jahr; lcdext.print(s); second=system.second(); lcdext.goto(1,0); std=""; str.putintf(std,system.hour(),2); min=""; str.putintf(min,system.minute(),2); sec=""; str.putintf(sec,system.second(),2); //s=""; s="TIME :"+std+":"+min+":"+sec; lcdext.print(s); //lcd.clreol(); //return system.second(); } //****************************************************************************** /*function temp3() returns int { string s3; float U3,R3,T3; s3=""; U3=0.004*ports.adc(2); R3=5/U3-1; T3=1000/(math.ln(R3)/3.435+1000/298)-274;//-273 str.putfloatf(s3,T3,1); s3="T3:"+s3+"C"; lcd.goto(1,0); lcd.print(s3,str.length(s3)); lcd.clreol(); return system.second(); //return system.timer(); //systemtimer wird jede 1ms um 1erhöht }*/ //****************************************************************************** function selector() returns int { i=i+1; if (i==1) clock(); if (i==2) temp12(); return system.second(); } //****************************************************************************** thread main { ports.setb(1,0); i=0; lcd.init(); sleep 200; lcdext.init(); sleep 200; /*hwcom.init(); hwcom.setspeed(hwcom.SPEED_9600);*/ int t1_old,t2_old,t3_old; //t1_old=system.timer(); //t1_old=system.second(); t2_old=system.second(); loop { //if (math.abs(system.timer()-t1_old) > 499) t1_old=temp(); //alle 0.5s ausführen //der system.timer läuft mit einem Takt von 1 ms!!! //if (math.abs(system.second()-t1_old) > 1) t1_old=temp12(); //alle 2s ausführen //if (math.abs(system.second()-t2_old) > 0) t2_old=clock(); //alle 1s ausführen if (math.abs(system.second()-t2_old) > 3) t2_old=selector(); //alle 2s ausführen //if (math.abs(system.second()-t3_old) > 1) t3_old=temp3(); //alle 2s ausführen } } //****************************************************************************** | ||
Antwort schreiben Antworten: |