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