Es bleibt nicht aus, dass man immer mal wieder hier vorbei kommt.
Der Grund meines Besuchs hier ist der Code von Stallion, da ich mich erinnert habe, dass er eine Abbremsfunktion in Turn() eingebaut hatte.
Mein Problem: Ich verstehe nicht wie das gehen soll.
Ich habe mal (hoffentlich korrekt) den gekürzten code von Stallion nochmal wiedergegeben und meine Frage da reingeschrieben:
Code:
---> enc_count wird einmal berechnet.
---> Bei degree = 90 wird enc_count also 36,72 (36 oder 37 ist aber egal)
enc_count = (unsigned int) (((long)abs(degree) * (long)4080) / (long)10000);
// set direction
// reset encoder
// set speed
// do until angel reached
while(tot_count < enc_count)
{
tot_count += encoder[LEFT];
// calculate speed difference
// reset encoder
// calculate new speed
if (diff > 0) //Left faster than right
{
}
if (diff < 0) //Right faster than left
{
}
// set new speed, with slow down
---> Hier den nur einmal berechneten Wert von enc_count eingesetzt, ergibt fuer
---> mich keinen Sinn, da doch dann eigendlich nur [l|r]_speed durch diese
---> 'Konstante' geteilt und abgezogen wird.
---> Wenn Speed als so um 200 (plus/minus "calculate new speed") ist, und dann durch
---> 36 oder 37 geteilt wird, kommt da bei mir ein Wert um 200/36 = 5 raus.
---> Diese 5 werden nun aber einfach nur von den 200 abgezogen und wir fahren doch
---> 'nur' die gesamte Strecke etwas langsamer.
MotorSpeed (l_speed - (unsigned char) ((unsigned int)(l_speed) / enc_count),
r_speed - (unsigned char) ((unsigned int)(r_speed) / enc_count));
Sleep(36);
}
War es so gewollt, und ich habe falsch verstanden, das am Ende der Fahrstrecke abgebremst werden sollte? Oder habe ich den Code nicht verstanden?
Mag hier noch einer Antworten?
Lesezeichen