Na dann hoff' ich, daß der Juilien das ev. berücksichtigt. Ich kann nix sagen dazu, keinerlei Unterlagen.
Druckbare Version
Na dann hoff' ich, daß der Juilien das ev. berücksichtigt. Ich kann nix sagen dazu, keinerlei Unterlagen.
Hi,
das mit den Back LED's ist korrekt. Beides geht nicht.
Wenn man sich den Sourcecode von OdometrieData ansieht, werden da auch die Back LED's explizit ausgeschaltet.
Wenn man beides verwendet bekommt man Phantasiewerte für die Odometrie :-(
Oh je. Na, wenn er richtig fährt, isses ja nicht so schlimm, wenn nix leuchtet
Jo, danke für eure Tipps. Ich werde dann wohl das mit den Back-LED's weglassen. Jetzt funktionierts!
@PicNick:
sagte: "Und wenn du mit der Speed oben oder unten anstehst, musst du wohl auch ein Wort mit dem anderen Motor wechseln, sonst bricht Verzweiflung aus."
Das habe ich ja beachtet siehe:
...
if (sr>254){sr=255; sl--;}
if (sr<61){sr=60; sl++;}
...
sr=Speed Rechts
sl=Speed Links
hallo, ich habe mir vor kurzem den asuro zusammen gebraten, und mit hilfe des oben geposteten codes selber mal was versucht, gebt mir bitte verbesserungs vorschläge und tipps^^
grußCode:#include "asuro.h"
int main(void)
{
int Lnow;
int Rnow;
int Rold;
int Lold;
int Count1=0;
int Count2=0;
int sl=180;
int sr=180;
unsigned int data[2];
unsigned char taste;
Init();
while(1)
{
MotorDir(FWD,FWD);
MotorSpeed(sr,sl);
OdometrieData(data);
if (data[0] > 312) Lnow = 1; else Lnow = 0;
if (data[1] > 312) Rnow = 1; else Rnow = 0;
if (Lnow ^ Lold) Count1++;
if (Rnow ^ Rold) Count2++;
Lold=Lnow;
Rold=Rnow;
if (Count1>80 && Count2<80)
{
sr=180;
sl=sl+5;
Count1=0;
Count2=0;
}
else if (Count2==80 && Count1<80)
{
sl=180;
sr=sr+5;
Count1=0;
Count2=0;
}
}
return 0;
}
GE-RO
Hi,
wie kommst du auf den Grenzwert 80? Ist das einfach eine experimentell ermittelte Zahl oder hat das eine Bedeutung?
Bei der 2. Bedinung prüft du: else if (Count2==80 && Count1<80) sollte es nicht heissen Count2>80 so wie in der ersten Bedingung?
Ansonsten: Fährt dein Asuro damit gerade aus oder nicht?
stimmt, das muss nicht == sondern > al 80 sein... 80 hab ich nur zufällig gewählt, da ich denke das der wert nicht zu groß und icht zu klein ist..
gruß
GE-RO
Hallo GE-RO,
es ist immer schwer, sich in anderen Programmen zurecht zu finden. Irgendwie hast du auch links und rechts verwechselt.
Der Einfachheit halber hab ich mal meine Geradeaus-Routine in dein Programm eingebaut. Zuerst lief es auch nicht. Dann habe ich bemerkt, daß du in MotorSpeed() rechts und links vertauscht hattest. Nach Korrektur laufen die Räder mit meiner Routine jetzt synchron. siehe Code
Gruß waste
Code:#include "asuro.h"
int main(void)
{
int Lnow;
int Rnow;
int Rold;
int Lold;
int Count1=0;
int Count2=0;
int diff;
int sl=180;
int sr=180;
unsigned int data[2];
Init();
while(1)
{
MotorDir(FWD,FWD);
MotorSpeed(sl,sr);
OdometrieData(data);
if (data[0] > 600) Lnow = 1; else Lnow = 0;
if (data[1] > 600) Rnow = 1; else Rnow = 0;
if (Lnow ^ Lold) Count1++;
if (Rnow ^ Rold) Count2++;
Lold=Lnow;
Rold=Rnow;
diff=Count2-Count1;
if (diff>0) sr--;
else if (diff<0) sl--;
else {sr=180; sl=180;}
if (sr<0) {sr=0;}
if (sl<0) {sl=0;}
}
return 0;
}
stimmt.. ich hab das verwechselt, hier nochmal komplett überarbeitet.. jetzt klappst ich habs selber gad ausprobiert.. ;)
grußCode:#include "asuro.h"
int main(void)
{
int Lnow;
int Rnow;
int Rold;
int Lold;
int Count1=0;
int Count2=0;
int sl=180;
int sr=180;
unsigned int data[2];
unsigned char taste;
Init();
while(1)
{
MotorDir(FWD,FWD);
MotorSpeed(sr,sl);
OdometrieData(data);
if (data[0] > 312) Lnow = 1; else Lnow = 0;
if (data[1] > 312) Rnow = 1; else Rnow = 0;
if (Lnow != Lold) Count1++;
if (Rnow != Rold) Count2++;
Lold=Lnow;
Rold=Rnow;
if (Count2==80 && Count2<80)
{
sl=180;
sr=sr+5;
Count1=0;
Count2=0;
}
else if (Count1==80 && Count1<80)
{
sr=180;
sl=sl+5;
Count1=0;
Count2=0;
}
}
return 0;
}
GE-RO
Hallo!
Danke! Ich werds mal testen.
MfG
Julien