dann dürfte der code aber überhaupt nicht gehn!?
die rechnung mag ja stimmen, aber in der variable enciode[left] werden nun mal nicht die anzahl der ticks, sondern der acktuelle werte der odometrie gespeichert.
mit drehzahl etc hat das überhauptnix zu tun
entwede hab ich da jetzt einen knoten im hirn, oder du...
dann dürfte der code aber überhaupt nicht gehn!?
ich hab den code grad mal selber probiert.
komisch...
könnte es sein, das die dokumentation nicht so ganz stimmt?
ööhm... und was is dann das "neue" an der neuen lib? dass die werte per interrupt ermittelt werden oder was? hoffentlich schaut al einer hier rein der sich damit auskennt... -.-
@EDH
aus der go-funktion geht doch aber auch hervor dass die encoder[LEFT] sozusagen die übergänge zählt.....
eben darum dacht ich das ja auch...
ich dagegen hab mich auf die doku verlassen. und die besagt eindeutig, dass die werte der odometrie drinne gespeichert sind. tja ähh.Odometriesensor Werte bei Interrupt Betrieb. encoder[0] links, encoder[1] = rechts. (Wertebereich 0..1023)
Definiert in Zeile 170 der Datei asuro.h.
so hier ist die go funktion... sie nimmt offensichtlich die werte an als die gezählten tiks.Code:void Go(int distance, int speed) { int enc_count = 0; int tot_count = 0; int diff = 0; int l_speed = speed, r_speed = speed; enc_count=abs(distance); // enc_count=distance*10000; // enc_count/=12823; Encoder_Set(0,0); // reset encoder MotorSpeed(l_speed,r_speed); if(distance<0) MotorDir(RWD,RWD); else MotorDir(FWD,FWD); while(tot_count<enc_count) { tot_count += encoder[LEFT]; diff = encoder[LEFT] - encoder[RIGHT]; if (diff > 0) { //Left faster than right if ((l_speed > speed) || (r_speed > 244)) l_speed -= 10; else r_speed += 10; } if (diff < 0) { //Right faster than left if ((r_speed > speed) || (l_speed > 244)) r_speed -= 10; else l_speed += 10; } Encoder_Set(0,0); // reset encoder MotorSpeed(l_speed,r_speed); Msleep(1); } MotorDir(BREAK,BREAK); Msleep(200); }
ich glaub ich werd mal nen programm schreiben was die werte einfach ausgibt... bis gleich.
hmmm... also folgendes programm
gibt folgendes aus:Code:#include "asuro.h" int main(void) { Init(); Encoder_Init; MotorSpeed(150,150); Encoder_Set(0,0); while(1){ PrintInt(encoder[LEFT]); SerWrite(" ",3); PrintInt(encoder[RIGHT]); SerWrite("\n\r",2); } return 0; }
würde das einer von euch mal kurz flashen und sagen was bei ihm rauskommt? dankeCode:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
naja...bei mir auch!
aber das passt ja auch nicht zur teorie von EDH!?
Lesezeichen