PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauche hilfe bei odometrie.



Sim Robot
22.12.2008, 09:02
ICh möchte , dass der Asuro überprüft, ob sich die Raäder drehen. main Programm sieht bis jetzt so aus aber es funktioniert nicht. Dies hat mich zwar nicht überrascht, aber ich habe auch keine Ideen mehr wie ich es zum Laufen bekommen könte.
Mein Programm:
#include <asuro.h>

int main(void){
Init();
while (1){
OdometrieData(Data);
if(Data[0]>511){
Sleep(255);
Sleep(105);
OdometrieData(Data);
if(Data[0]>511){
SerWrite("motor dreht sich nicht",0,23)
}
}


OdometrieData(Data);
if(Data[1]>511){
Sleep(255);
Sleep(105);
OdometrieData(Data);
if(Data[0]>511){
SerWrite("Motor dreht sich nicht",0,23)
}
}


}

}
return 0;
}
wie krige cih das Programm zum Laufen???

Valen
22.12.2008, 14:46
Was meinst du mit laufen? Kompilieren? Na dan, was sind die fehler meldungen die du vom Kompiler bekomst? Jedenfalls ist dah eine krumme hacke } zuviel.

Oder meinst du laufen im Asuro(cpu)? Deine 'drehung messung' wird 'keine drehung' sagen wenn die geberscheibe gedreht sein konnen von etwa mittel dunkel (halb schwarz-weiss) bis mehr dunkel (ein höhere werte ist dunkler). Das ist schön eine drehung. Und die 'mittel dunkel'-wert ist nich immer 512. Vieleicht komt es nicht hoher dann 512 in deiner Asuro. Dan wird deine lösung nicht klappen, und nur im while schleife rund-'laufen'. ;)

Persönlich wurde ich jeder anderung von helligkeitwerte (grosser als eine gewissene rausch wert) als drehung bemerken. Aber damit hat man noch keine bestimmte drehrichtung. Dazu muss du die alte un neue helligkeit von einander trennen und auf negatief-sein beobachten.

Sim Robot
22.12.2008, 15:14
Mit laufen meine ich, dass der asuro das macht was ich möchte. Dass ich die Fehlermeldungen lesen muss ist mir klar. nur das Programm ht einen Denkfehler meiner seits, das nicht durch das Kompelieren erkennt wird.
Die geschweifte klammer muss ich selbstverständlich entferenen.
Ich habe das Programm noch einmal +berarbeitet. Es siht jetzt so aus:
#include <asuro.h>

int main(void){
Init();
unsigned int Data[2];
while (1){
OdometrieData(Data);
if(Data[0]>511){
Sleep(255);
Sleep(105);
OdometrieData(Data);
if(Data[0]>511){
SerWrite("motor dreht sich nicht",22);
}
}


OdometrieData(Data);
if(Data[1]>511){
Sleep(255);
Sleep(105);
OdometrieData(Data);
if(Data[0]>511){
SerWrite("Motor dreht sich nicht",22);
}
}


}
return 0;
}

Valen
22.12.2008, 15:19
Ok,

Ich habe meiner bericht mehrmahls geandert gleichzeitig mit deiner reaction. Hast du das schon aufgemerkt?

Sim Robot
22.12.2008, 15:24
Ja habe ich schon bemerkt, aber gibt es diesen beitrag auch noch ohne tippfehler, denn ich werde daraus einfach nicht schlau.

Valen
22.12.2008, 15:41
Deutsch ist nicht meiner Muttersprache. Ich bin ein Niederlander, und die Deutsche sprache ist mir nicht leicht abgegangen im schule. Und ich habe auch keine richtiges 'deutches' klavier mit Umlaut und so, sondern ein UK-klavier. Ohne die richtige abbildungen auf die Tasten geht mich das sehr schwierig ab hier zu posten. Bitte meine verzeihung dafur.

Vieleicht kan jemand anderes dabei helfen.

Sim Robot
23.12.2008, 17:41
Ich habe mein Programm noch einmal völlig umgeschrieben.
und rausgekommen ist das hier:
#include <asuro.h>


int Drehen(char dl,char dr){
int za;
MotorDir(RWD,RWD);
MotorSpeed(120,120);
for(za=0;za<282;za++){
Sleep (225);
}
MotorDir(dl,dr);
MotorSpeed(120,120);
for(za=0;za<282;za++){
Sleep (225);
}
return 0;
}


int Zeit(int Da,char Zei){
int Data[2];
int za;
OdometrieData(Data);
if(Data[Da]>750){
while(Data[Da]>750){
MotorSpeed(150,150);
Sleep(1);
OdometrieData(Data);
}
while(Data[Da]<550){
MotorSpeed(200,200);
Sleep(1);
Zei++;
OdometrieData(Data);
}
}
else if(Data[Da]<550){
while(Data[Da]<550){
MotorSpeed(150,150);
Sleep(1);
OdometrieData(Data);
}
while(Data[Da]>750){
MotorSpeed(200,200);
Sleep(1);
Zei++;
OdometrieData(Data);
}
}
MotorSpeed(0,0);
for(za=0;za<1000;za++){
Sleep (225);
}
return 0;
}


int Stehen(int Da,char Ze){
unsigned int Data[2];
MotorDir(FWD,FWD);
MotorSpeed(255,255);

OdometrieData(Data);

if(Data[Da]>750){
Sleep(Ze);
OdometrieData(Data);
if(Data[Da]>750){
Drehen(RWD,FWD);
}
else{
MotorDir(FWD,FWD);
MotorSpeed(255,255);
}
}
else if(Data[Da]<550){
Sleep(Ze);
OdometrieData(Data);
if(Data[Da]<550){
Drehen(RWD,FWD);
}
else{
MotorDir(FWD,FWD);
MotorSpeed(255,255);
}
}
return 0;
}




int main(void){
Init();
unsigned int zl;
unsigned int zr;
Zeit(0,zl);
Zeit(1,zr);
while(1){
Stehen(0,zl);
Stehen(1,zr);
}
return 0;
}
Doch statt geradeaus zu fahren bis sich ein rad nicht mehr dreht und dann zurückzustetzen und zu drehen
tut er zweiteres ständig unabhängig von der Rad drehung. Woran liegt das?? Wo ist der fehler??