Hallo
Erstmal herzlich willkommen im RN-Forum.
Dein Programm sieht ja nicht schlecht aus. Allerdings stimmen bei deinem asuro die Motordrehrichtungen scheinbar nicht (Auslieferfehler des asuros). Mich stört das im Moment nicht, weil mein asuro grad auch falschrum läuft. Besser wäre es aber, wenn du die Motorleitungen drehen würdest.
Zu deinem Programm:
Ich habe die Funktion speed() entfernt, weil sie nicht verwendet wird. Die Variable sped heist jetzt speed, der SerWrite()-Befehl wurde auskommentiert. Ebenso das include der stdlib.h, die wird von asuro.h automatisch eingebunden(?). Jetzt kann ich dein Programm fehlerfrei übersetzen und, oh Wunder, scheinbar funktioniert es sogar mit meinem asuro (der ganz spezielle Odo-Scheiben drauf hat):
Code:
#include "asuro.h"
//#include <stdlib.h>
int main(void)
{
unsigned char flagl=0, flagr=0;
unsigned int data[2]; //Speicher Bereitstellen
int wegl, wegr, diff, time, timeb;
int speed=200, speedLeft,speedRight;
Init();
MotorDir(RWD,RWD);
StatusLED(GREEN);
speedLeft = speedRight = speed;
while(TRUE)
{
wegl=0; wegr=0;
for(time=1; time<500; time++) // Zeitschleife 1 Sekunde
{
OdometrieData(data);
if ((data[0] < 550) && (flagl == 1)) {flagl = 0; wegl++;}
if ((data[0] > 650) && (flagl == 0)) {flagl = 1; wegl++;}
if ((data[1] < 550) && (flagr == 1)) {flagr = 0; wegr++;}
if ((data[1] > 650) && (flagr == 0)) {flagr = 1; wegr++;}
diff=wegr-wegl;
if (diff>0) speedRight--; // fahre geradeaus
else if (diff<0) speedLeft--;
else
{
speedRight=speed;
speedLeft=speed;
}
if (speedRight<0) {speedRight=0;}
if (speedLeft<0) {speedLeft=0;}
MotorSpeed(speedLeft,speedRight);
//SerWrite(wegl, sizeof(wegl));
Sleep(76); // 1 Millisekunde pause
}
if(PollSwitch()>0)
{
for (timeb=1;timeb<500;timeb++)
{
if(PollSwitch()>0)
{
MotorDir(BREAK,BREAK);
BackLED(ON,ON);
Sleep(76);
}
}
}
}
return 0;
}
(längere Programme bitte immer im code-Tag posten)
Mein asuro fährt damit fast geradeaus (etwas langsam wegen meinem Vorgelege). Wenn ich ihn in der Luft halte und ein Rad mit der Hand abbremse, wird auch das andere Rad gebremst. Prima! Auch deine Odo-Erfassung und die PollSwitch()-Auswertung sind pfiffig und auf Anhieb gut gelöst. Du scheinst mir ein kleiner Hacker zu sein.
Gruß
mic
Lesezeichen