Hallo HyperGumba,

erst einmal ein "Willkommen im Forum".

Dein Programm wird aus mehreren Gründen leider nicht funktionieren.

1) In deinem main() ist keine 'Endlosschleife' vorhanden.
Mindestens vor dem "return 0;" ein while(1); einbauen.

2) In beiden MotorXXX()-Funktionen erhöhst du die Geschwindigkeit von 0 an bis 0xFF.
Im Prinzip ist das OK, aber da die Motoren keinesfalls bei speed-Werten unter ca. 100 anfangen zu drehen, ist das 'hochfahren' von speed gefährlich solange die Motoren nicht schon drehen.
Vor allem wird ein Motor als erster drehen. Dann fährt der Asuro hübsch im Kreis bis endlich auch der andere Motor wirklich dreht. Dann aber ist die Richtung schon nicht mehr geradeaus und somit: "Wird nix mit Rechteck"
In der MotorRight()-Funktion wird das nicht auffallen, da ja sowiso nur ein Motor fahren soll.

3) In MotorRight() hast du keine richtige Kontrolle darüber, wie lange der Motor drehen wird (siehe bei 2). Somit hast du keine wirkliche Möglichkeit vorrauszubestimmen um wieviel sich der Asuro drehen wird.
90 Grad werden es wahrscheinlich nicht so schnell werden ;-(

4) Wenn du noch ganz viel Pech hast, dann wird dir der Compiler z.B. den Code
Code:
for (i = 0; i < 0x1FFF; i++)
   for (j = 0; j < 0x1F; j++);
      MotorSpeed(0,speed);
komplett löschen, da absolut nichts passiert. Der Compile ist recht gut, wenn es darum geht zu optimieren.
Du kannst dies aber über eine Option im Makefile abschalten.


Mach dir nichts aus dieser Kritik. Ist ja schliesslich nicht an dir, sondern nur am Code .

Gruß Sternthaler

P.S.: Tipps, um das besser zu machen, wirst du mit der Suchen-Funktion oben aus dem Kopf dieser Forumsseite ganz bestimmt finden können.