PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Froge zur Go Funktion



Mastermsc
29.11.2006, 16:15
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:

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);
}

Osser
29.11.2006, 16:34
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.

Mastermsc
29.11.2006, 16:46
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 8-[

damaltor
29.11.2006, 16:53
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.