Hallo ihr Beiden,
wenn ihr schon auf dem Wege seid eine Funktion zu schreiben, die 'alles' kann, dann wäre es nicht schlecht, wenn ihr euch ein bisschen an die bestehende Lib anlehnen würdet bei den Parametern.
Aktuell heißt deine Funktion hai1991:
Code:
void kurve(
int radius,
int winkel,
int speed)
{
..
}
Die Funktion in der Lib heißt aktuell:
Code:
void GoTurn (
int distance,
int degree,
int speed)
{
..
}
Ich benenne mal deine Funktionsparameter um, und nehme noch den Parameter distance aus der Lib dazu:
Code:
void kurve(
int distance, /* aus der Lib */
int radius, /* dein int radius, */
int degree, /* dein int winkel, */
int speed) /* dein int speed) */
{
..
}
Nun sind immer noch deine Parameter vorhanden, und aus der Lib ist nur distance hinzugekommen.
Und jetzt der 'Trick', damit deine Funktion komplett in der Lib eingesetzt werden könnte und die GoTurn()-Funktion ersetzt.
Mit dem Trick könnten dann nämlich alle geschriebenen Programm, die die 'Funktionen' Go() und Turn() nutzen, weiterhin funktionieren, und es braucht dann nur noch ein weiterer #define für Arc hinzukommen, der dann eben für deine Bogenfahrt benutzt wird.
--> Diese beiden Defines sind schon in der Lib und würden ersetzt.
#define Go(distance,speed) GoTurn(distance,0,speed)
#define Turn(degree,speed) GoTurn(0,degree,speed)
--> durch diese hier:
#define Go(distance,speed) kurve(distance,0,0,speed)
#define Turn(degree,speed) kurve(0,0,degree,speed)
--> und neu hinzu kommt:
#define Arc(radius,degree,speed) kurve(0,radius,degree,speed)
Wenn die hier gebaute Funktion also so gut wird, dass sie als Ersatz für die Lib taugt, dann solltest es den Lib-Benutzern leicht gemacht werden einfach umzusteigen.
Mit den #defines laufen jedenfalls alle alten Programme weiter und sie bekämen dann halt noch die Bogenfahrt über Arc() hinzu dazu.
Und als letztes I-Tüpfelchen wäre eine Änderung von kurve() in GoTurnArc() ein heißer Kandidat für die Lib.
Und dann wäre da noch meine Anfrage an mausi_mick.
So richtig folgen kann ich deiner Erklärung nicht.
Hmm, eine Bearbeitung von Tiks zum richtigen Zeitpunkt hatte ich ja schon oben bei https://www.roboternetz.de/phpBB2/vi...=393258#393258 als Vorschlag gegeben.
Dort wird unabhängig von einer Zeit für Msleep(), ja immer dann geregelt, wenn ein Tik aufgetreten ist.
Klar, zu Anfang ist der Unterschied zwischen beiden Seiten ja auf alle Fälle mit: 1 Tik hier und 0 Tik dort, ziemlich falsch. Aber genau deshalb hatte ich schon zu Anfang im Thread vorgeschlagen, dass die encoder-Werte eben nicht mit jeder Reglerbearbeitung wieder auf (0,0) gesetzt werden. Nach ein paar Tiks Fahrt wird das Verhältnis rechts/links ja auch bei einer Abweichung von nur einem Tik auf einer Seite ja nicht mehr so gravierend falsch.
Gruß Sternthaler
Lesezeichen