-         

Ergebnis 1 bis 4 von 4

Thema: Froge zur Go Funktion

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.11.2006
    Beiträge
    20

    Froge zur Go Funktion

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Moin, wer kann mir erklären, was diese Ausschnitte aus der normalen Go() Funktion machen

    1.) uint32_t enc_count; //was das?
    int tot_count = 0;


    2.) enc_count=abs(distance)*10000L; //was wird hier denn
    enc_count/=19363L; //genau berechnet ?


    3.) Encoder_Set(0,0); //warum immer reset ? wozou ?



    Hier nochmal die Go() Funktion:
    Code:
    void Go(int distance,int power)
    {
       uint32_t enc_count;
       int tot_count = 0;
       int diff = 0;
       int l_speed = power, r_speed = power;
       
       // calculation tics/mm
       enc_count=abs(distance)*10000L;
       enc_count/=19363L;
       
       Encoder_Set(0,0);      // reset encoder
    
       MotorSpeed(l_speed,r_speed);
       if(distance<0) MotorDir(RWD,RWD);
       else MotorDir(FWD,FWD);
       while(tot_count<enc_count) {
          tot_count += encoder[LEFT];
          diff = encoder[LEFT] - encoder[RIGHT];
     //Programmanfang für geradeausfahren
       if (diff > 0) { //Links schneller als rechts   
             if ((l_speed > power) || (r_speed > 244)) l_speed -= 10;
             else r_speed += 10;
          }
          if (diff < 0) { //Rechts schneller als links
             if ((r_speed > power) || (l_speed > 244)) r_speed -= 10;
             else l_speed += 10;
          } 
    //Programmanende für geradeausfahren 
    
       Encoder_Set(0,0);      // reset encoder
       MotorSpeed(l_speed,r_speed);
       
       Msleep(1);
       }
       MotorDir(BREAK,BREAK);
       Msleep(200);
    }

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von Osser
    Registriert seit
    31.10.2006
    Ort
    Köln
    Alter
    47
    Beiträge
    387
    Hi Mastermsc,


    zu 1)
    Hier werden die Variablen deklariert und teilweise gleich initialisiert.
    z.B. wird tot_count auf Null gesetzt


    zu 2)
    Scheinbar hast Du eine alte asuro lib, da dass in meiner Version auskommentioert ist. Hier wurde ursprünglich die Umrechnung der Länge auf Asuroeinheiten ausgeführt.

    zu 3)
    Das Reset ist nötig, da der Endpunkt mit diesem Algorythmus nicht inkrementell sondern absolut ermittelt wird. Würde er inkrementell ermittelt könnte es wegfallen.


    O.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    09.11.2006
    Beiträge
    20
    Hmm, ja schon klar, aber was ist das uint32_t fürn Typ?

    Ne ich komme mit dieser Asuro Lib klar bzw. brauche keine neue.
    Hmm ich muss wissen wie die Rechnung zustande kommt...

    3.) hab ich nicht so recht verstanden

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    zu 3.: es wird der zähler auf 0 gesetzt, weil der asuro solange gerade aus fährt bis ein bestimmter wert (die gegebene strecke) erreicht wurde. also muss die zählung immer bei 0 anfangen. das ist eine absolute bestimmung.

    inkrementell wäre, wenn man z.B. einma 10 und einmal 20 einheiten fahren will, dass der zähler insgesamt bis 30 zählt (die strecke wird nach der fahrt um 10 einheiten um 20 INKREMENTIERT). der zähler wartet also bis 30 einheiten (insgesamt) gefahren wurden.
    kleinschreibung ist cool!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •