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

hwcom sync-Probleme? Kategorie: Programmierung (von skontox - 4.08.2003 11:59)


Ein wunderschönen Tag!
Ich habe die CC2 mit einem Datenhandschuh über die RS232-Schnittstelle mit 9600 Baut gekoppelt!
Problem ist, dass der Handschuh seine Daten permanent sendet (kein Empfang möglich!) und ich bei grö�eren
Berechnungen mit den empfangenen Werten Probleme mit der Synkronisation mit dem Empfang habe.
Bei kleineren Berechnungen läuft es ganz gut!
Was kann man da machen? Wahrscheinlich ist mein Code auch nicht so super, aber auf die Schnelle
viel mir nix besseres ein.
Zum Testen habe ich hier einen ferngesteuerten Wagen über den Handschuh gesteuert.
D.H der Handschuh hat einen Bewegungssensor. Wenn der Handschuh nach vorne kippt, dann würde
der Wagen nach vorne fahren. Wenn der Handschuh nach hinten kippt nach hinten. Und nach rechts und links,
dann würde der Wagen nach rechts und links fahren, das klappt auch fast immer, aber manchmal bekommt er halt
Probleme mit der Synkronisation. Um den Wagen zusteuern, werden einfach Port 0,1,2,3 benutzt.
Diese Ports ersetzen die Knöpfe an der Fernbedienung!
Hier mal mein Beispiel-Code:


function Glove_Miniwagen()
{
  setzte_int_Display("Glo-Mini"); //Funktion für die interne LCD-Anzeige
  sleep 1000;

  //# Glove_Erkennung #
  Glove_Erkennung (); //Um zuerkennen, ob ein Handschuh angeschlossen ist.
 
  //Erneute Erkennung zur Synchronisation und Datenerfassung
  // Variablen deklarieren 
  int empfang1,empfang2,syncerror_flag,syncerror2_flag,poweron_flag;
  int count,linkswert,rechtswert;
  float links, rechts, wert;
  string ueberwachung;
  syncerror_flag=0;
  syncerror2_flag=0;
  poweron_flag=0;
 
  //Hardware-RS232-Schnittstelle initialisieren
  hwcom.init();
  hwcom.setspeed(5); //9600 Baud
 
  while syncerror_flag!=1
  {
    syncerror2_flag=0;
    wait hwcom.rxd();
    empfang1= hwcom.get();
    if empfang1==1  //Endzeichen im Paket
    {
       wait hwcom.rxd();
       empfang2= hwcom.get();
       if empfang2==128  //Startzeichen im Paket
       {
          while syncerror2_flag!=1
          {
             for count = 1 ... 10
             {
                 wait hwcom.rxd();
                 wert= hwcom.get();
                
                 if count==6 //Enthält den "Pitch"-Wert Wert 255 ganz nach vorne gekippt!
                                  //Wert 0 ganz nach hinten. 127 genau die Waage
                 {
                    if wert>=130 and wert<=155 //Der Wagen soll nicht fahren!
                    {
                       ports.set(0,0); //Vorwärts ist aus
                       ports.set(1,0); //Rückwärts ist aus
                    }
                    if wert<130  //Der Wagen soll Rückwärts fahren
                    {
                       ports.set(0,0); //Vorwärts ist aus
                       ports.set(1,1); //Rückwärts ist an
                    }
                    if wert>155 //Der Wagen soll Vorwärts fahren
                    {
                       ports.set(1,0); //Rückwärts ist aus
                       ports.set(0,1); //Vorwärts ist an
                    }
                 }
                 if count==7 //Enthält den "Roll"-Wert Wert 255 ganz nach vorne gekippt!
                                  //Wert 0 ganz nach hinten. 127 genau die Waage
                 {
                    if wert>=100 and wert<=155 //Der Wagen soll nicht lenken!
                    {
                       ports.set(2,0); //Rechts ist aus
                       ports.set(3,0); //Links ist aus
                    }
                    if wert<100
                    {
                       ports.set(2,0); //Rechts ist aus
                       ports.set(3,1); //Links ist an
                    }
                    if wert>155
                    {
                       ports.set(3,0); //Links ist aus
                       ports.set(2,1); //Rechts ist an
                    }
                 }
                 if count==9 //Endzeichen des Paketes muÃ? 1 sein
                 {
                    if wert!=1
                    {
                       syncerror2_flag=1;
                    }
                 }
             }
          }
       }
    }
  }
  Portsoff(); //diese Funktion setzt die verwendeten Ausgangsport wieder auf 0
  setzte_int_Display("Sy-Error"); //Funktion für die interne Anzeige
  sleep 1000;
  setzte_int_Display("Auswahl");
}


Vielleicht kann mir mal jemand einen Tipp geben, sprich bessere Vorgehensweise
in Verbindung mit der hwcom-Schnittstelle!

GruÃ? skontox
 


    Antwort schreiben


Antworten:

Re: hwcom sync-Probleme? (von Tom - 6.08.2003 21:55)
    Re: hwcom sync-Probleme? (von Fischi - 7.08.2003 18:40)
    Re: hwcom sync-Probleme? (von Rolf - 6.08.2003 22:46)
        Re: hwcom sync-Probleme? (von Fischi - 7.08.2003 18:41)
Re: hwcom sync-Probleme? (von André H. - 5.08.2003 9:59)
    Re: hwcom sync-Probleme? (von Fischi - 5.08.2003 13:40)
Re: hwcom sync-Probleme? (von Rolf - 4.08.2003 16:00)
    Re: hwcom sync-Probleme? (von André H. - 5.08.2003 8:45)
        Re: hwcom sync-Probleme? (von Rolf - 5.08.2003 12:20)
            Re: hwcom sync-Probleme? (von Rolf - 5.08.2003 13:25)
                Re: hwcom sync-Probleme? (von Fischi - 5.08.2003 13:45)
    Re: hwcom sync-Probleme? (von Fischi - 4.08.2003 19:06)
        Re: hwcom sync-Probleme? (von Rolf - 4.08.2003 20:51)