Hä? Ich versteh jetzt leider nicht, was das von dir jetzt genau bringt. 
Könnte mir mal jemand erklären, was ein PI-Regler ist?
Danke
Also ich hab jetzt mal die Lib erweitert, bzw. die Go() geändert.
Leider kennt C ja keine Vorgabeargumte.
Hier erstmal der Code:
Code:
void Go(int distance, int speed)
{
int enc_count = 0;
int tot_count = 0;
int diff = 0;
int l_speed = speed, r_speed = speed;
enc_count=abs(distance);
// enc_count=distance*10000;
// enc_count/=12823;
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];
if (diff > 0) { //Left faster than right
if ((l_speed > speed) || (r_speed > 244)) l_speed -= 10;
else r_speed += 10;
}
if (diff < 0) { //Right faster than left
if ((r_speed > speed) || (l_speed > 244)) r_speed -= 10;
else l_speed += 10;
}
Encoder_Set(0,0); // reset encoder
MotorSpeed(l_speed,r_speed);
Msleep(1);
}
MotorDir(BREAK,BREAK);
Msleep(200);
}
Noch kurz eine Erklärung:
Diese Konstruktion "if ((l_speed > speed) || (r_speed > 244))" dient dazu, dass der Wert erstens nicht unter den eingestellten Speed und 2. nicht über 255 geht. Ich denke, der Rest ist ersichtlich.
Es ist also ratsam, als maximal Geschwindigkeit, vielleicht 230 zu verwenden.
Bitte mal test, und sonst nochmal melden, wenn Fehler drin sind.
So long
Andun
Lesezeichen