Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Rolladensteuerung Kategorie: Programmierung (von André H. - 19.09.2004 12:12)
Als Antwort auf Re: Rolladensteuerung von DanielH - 15.09.2004 10:09
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT_V2, OSOPT V3.0
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)