Hallo hirbel,

ich habe nochmal gesucht, ... und gefunden.

In deinen Funktionen rechts270() und links270() benutzt du "GoTurn(0, -1 * WINKEL90, -1 * MOTOR_SPEED);" bzw "GoTurn(0, WINKEL90, -1 * MOTOR_SPEED);".
Somit gibt du hier negative Speed-Werte an GoTurn() weiter.
- GoTurn() aus encoder.c hat als Beschreibung für Speed: "speed Geschwindigkeit (Wertebereich 0...255)"
- In GoTurn() wird mit "int l_speed = speed, r_speed = speed;" dein negatives Speed 2 mal lokal gespeichert.
- In GoTurn() wird die Drehrichtung mit "if (degree < 0) MotorDir (RWD, FWD); else MotorDir (FWD, RWD);" eingestellt.
- In GoTurn() wird mit "MotorSpeed (l_speed, r_speed);" der Speed-Wert an beide Motoren weitergereicht.
===> Somit MUSS der Asuro über beide Räder drehen. <===

- In MotorSpeed() aus motor_low.c werden die beiden Speed-Angaben nur auf die AVR-Register zur Einstellung der PWM gegeben.
===> Diese MUESSEN zwischen 0 und 255 liegen. Negativ gibt nur Kraut und Rüben.
Und somit musst du die Funktionen rechts270() und links270() von den negativen Speed-Angaben erlösen.

... und weil der Asuro nun über beide Räder auf der Stelle dreht, fehlt dir nun das 'versetzen' um eine halbe/ganze Asurobreite.

Um ein sicheres Anfahren beider Motoren zu gewährleisten, solltest du deinen Define "#define MOTOR_SPEED 150" vielleicht vergrößern.
Einer meiner Motoren fängt z.B. erst bei ca. 180 an sicher zu drehen.


Weiterhin frohes Putzen und einen erfolgreichen Termin.

Gruß Sternthaler