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:
Noch kurz eine Erklärung: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); }
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







Zitieren

Lesezeichen