So, da habe ich es nun geschafft nach Hause zu kommen.![]()
Hier erst einmal der Code für die Funktion MotorSpeed()
Wer es selber einbauen möchte, findet die Funktion je nach LIB-Version in unterschiedlichen Dateien.
- Asuro-Original-CD in asuro.c
- Asuro-LIB bis Version V02.70rc2 in motor.c
- Asuro-LIB ab Version V02.70rc3 in motor_low.c
- In der nächsten Asuro-LIB dann auch vorhanden.
Keine Bange vor der Länge der Funktion.Code:inline void MotorSpeed ( unsigned char left_speed, unsigned char right_speed) { int l_speed; int r_speed; if (MY_MOTOR_DIFF != 0) { /* Das Ganze macht nur Sinn, wenn mindestens ein Motor fahren soll. */ if (left_speed > 0 || right_speed > 0) { /* Bei positivem MY_MOTOR_DIFF wird der rechte Motor verstaerkt. Bei negativem MY_MOTOR_DIFF wird der linke Motor verstaerkt. */ l_speed = left_speed - MY_MOTOR_DIFF / 2; r_speed = right_speed + MY_MOTOR_DIFF / 2; /* Wertebereich von 0 bis 255 pruefen. Unterscheiden nach positiver, bzw. negativer Vorgabe. */ if (MY_MOTOR_DIFF > 0) { /* Bei positivem MY_MOTOR_DIFF kann nur die rechte Seite > 255 werden. */ if (r_speed > 255) { /* Um die Differenz von MY_MOTOR_DIFF weiterhin zu erhalten, wird nun die linke Seite noch weiter reduziert, und die rechte Seite auf das zulaessige Maximum gesetzt. */ l_speed -= (r_speed - 255); r_speed = 255; } if (l_speed < 0) { /* Die linke Seite ist nun unter dem zulaessige Minimum von 0. Auch dies muss korrigiert werden. */ l_speed = 0; } } else { /* Bei negativem MY_MOTOR_DIFF kann nur die linke Seite > 255 werden. */ if (l_speed > 255) { /* Um die Differenz von MY_MOTOR_DIFF weiterhin zu erhalten, wird nun die rechte Seite noch weiter reduziert, und die linke Seite auf das zulaessige Maximum gesetzt. */ r_speed -= (l_speed - 255); l_speed = 255; } if (r_speed < 0) { /* Die rechte Seite ist nun unter dem zulaessige Minimum von 0. Auch dies muss korrigiert werden. */ r_speed = 0; } } left_speed = l_speed; right_speed = r_speed; } } OCR1A = left_speed; OCR1B = right_speed; }
Ist der Define für MY_MOTOR_DIFF mit 0 angegeben, wird gar kein zusätzlicher Code erzeugt. Sonst werden gerade mal um 45 Byte zusätzlich benötigt.
Gruß Sternthaler
P.S.: Ich habe mal mit verschiedenen Geschwindigkeiten die Wirkung getestet. Natürlich bekommt man keine gerade Fahrt über alle Geschwindigkeiten, allerdings sind die Abweichungen sehr gering.







Zitieren

Lesezeichen