PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verhalten von changeDirection(dir)



Filou89
22.04.2013, 12:13
Hallo,
Ich habe vor kurzem folgendes festgestellt:

die Funktion mSleep(...) wurde bei mir einfach übersprungen. Um zu sehen, bis wo der Code korrekt ausgeführt wird, habe ich die mSleep(...) Funktion vor die changeDirection(...) Funktion gesetzt. Nun wurde das Programm korrekt ausgeführt.

Kann jemand von euch den Fehler reproduzieren?

Meine Software:
AVR 20100110
PN 2.0.8
Loader v2.4a

Code fehlerhaft:


move(100, BWD, DIST_MM(250), BLOCKING);
mSleep(10);
setLEDs(0b1110);
changeDirection(FWD);
mSleep(3000); //mSleep wird nicht ausgeführt
setLEDs(0b0000);
move(180, FWD, DIST_MM(300), BLOCKING);
rotate(180, LEFT, 5, BLOCKING);
move(180, FWD, DIST_MM(300), BLOCKING);


Funktionierender Code:


move(100, BWD, DIST_MM(250), BLOCKING);
mSleep(10);
setLEDs(0b1110);
mSleep(3000); //mSleep wird ausgeführt
changeDirection(FWD);
setLEDs(0b0000);
move(180, FWD, DIST_MM(300), BLOCKING);
rotate(180, LEFT, 5, BLOCKING);
move(180, FWD, DIST_MM(300), BLOCKING);


Grüsse Filou

SlyD
27.04.2013, 12:55
Hallo,

changeDirection solltest Du nur dann verwenden wenn auch task_MotionControl regelmäßig ausgeführt wird.
Die Funktion selbst ändert nichts an der Fahrtrichtung das passiert etwas später.
Also das mit blockierenden move und rotates mischen ist eher ungünstig.

MfG,
SlyD