Re: Rolladensteuerung Kategorie: Programmierung (von André H. - 19.09.2004 12:12) | ||
Als Antwort auf Re: Rolladensteuerung von DanielH - 15.09.2004 10:09 | ||
| ||
Hallo Daniel, > > 2. Es ist nicht Sinnvoll nur für die Tasterauswertung jeweils einen eigenen Thread pro Taster zu verwenden. > > Es wäre eher hinderlich. Man sollte einen einzigen Thread benutzen, der nur die Auswertung > > aller Taster übernimmt. > > Um zu erfassen, wie lange ein Taster gedrückt wurde, sollte man mit dem Timer arbeiten. > > Dies geht auch problemlos für mehrere Taster in einem Thread. > ... > Hättest du mir einen Tipp, wie ich hier eine Zeitüberwachung einbauen kann? Ich bin leider noch nicht > so tief drin in der Programmierung. Um zu messen, wie lange eine Taste gedrückt wurde, mu�t Du lediglich den aktuellen Timerwertin eine Long-Variable speichern, sobald die Taste gedrückt wird. Sobald das Loslassen der Taste erkannt wird, ziehst Du vom dann aktuellen Timerwert den gespeicherten ab. In etwas so: long timer; byte Taste_flag //... if <Tastegedrückt> and Taste_flag=0 { timer=system.timer(); Taste_flag=1; // Aktion bei Drücken der Taste } //... if <Tastelosgelassen> and Taste_flag!=0 { timer=system.timer()-timer;// in timer steht nun die Dauer in ms, // wie lange die Taste gedrückt wurde. Taste_flag=0; // Aktion bei Loslassen der Taste } //... In Deinem entwurf müsste dies in etwas so aussehen: //------------------- thread TasterAction //------------------- // Ermitteln ob und welche Taste gedrückt wurde { int intTasterAllLast; //alter Stand der Digitalports int intTasterAll; //Var zum Auslesen der Digitalports long lngReadTime; //Zeitpunkt des Auslesens int intTasterAllChange; // Var zum Ermitteln der Zustandsänderung int intIndex1; // long lngTasterUP[15]; string s1,s2,s3; byte Taste_Flag[8], x; long Taste_Dauer[8]; //Initialisieren intTasterAllLast=0; intTasterAll=0b11111111; hwcom.init(); hwcom.clr(); hwcom.setspeed (hwcom.SPEED_57600); hwcom.print("Programm start"); hwcom.ret(); //alle Taster in einer Schleife abfragen loop { intTasterAllLast=intTasterAll; intTasterAll=ports.getb(1); lngReadTime=system.timer(); intTasterAllChange = intTasterAllLast xor intTasterAll; for intIndex1= 0...7 { x=1 shl intIndex1; if intTasterAllChange and x // Wird beim Drücken und Loslassen ausgeführt ! { hwcom.print("Taster Nr. "); hwcom.num(intIndex1); if intTasterAll and x { hwcom.print(" gedrückt"); Taste_Dauer[intIndex1]=system.timer(); } else { hwcom.print(" losgelassen1310Dauer: "); Taste_Dauer[intIndex1]=system.timer()-Taste_Dauer[intIndex1]; hwcom.num(Taste_Dauer[intIndex1]); hwcom.print("ms"); } hwcom.ret(); intTaster[intIndex1]=(intTasterAll and x)!=0; } } } } So sollte die Dauer, wie lange eine Taste gedrückt wurde, ausgegeben werden. Ach ja: Du brauchst am Anfang eines Threads nicht run 32; schreiben. Wenn Du einen Thread mit run <Threadname> startest, bekommt dieser die Prio 32 zugewiesen. Ein run mit Angabe der Prio benötigst Du nur, wenn ein Thread mit einer anderen Prio als 32 laufen soll. MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: Re: Rolladensteuerung (von DanielH - 26.09.2004 16:04) |