Hallo,
ich habe ein recht komischen Vorfall.
Ich möchte den Asuro einmal um 90° links und einmal um 90° rechts drehen lassen.
Meine Funktion für links geht da ganz gut nur rechts will der nicht so recht. Da dreht er ein wenig mehr als 300°
Dazu muß ich sagen, dass ich dies über die Odometrie mache. Dafür habe ich die Schwarz/weiß flächen umgebaut. nun habe ich halb schwarz und halb silber. Somit habe ich das "Rauschen" wegbekommen und der kleine fährt eine super linie.
Hier mal mein code
Evtl. kann man das noch besser lösen!!?Code:#include "asuro.h" unsigned int data[2]; int OdoDifferenz; int wegzaehler=0; unsigned int lineData[2]; char zeichen[4]; int start=0,wechsel=0; int schwarz=0,silber=0; int odo=0; int exit=0; void einmalrechts(void) { schwarz=0; silber=0; start=0; wechsel=0; OdometrieData(data); if (data[0]<110) { start=0; wechsel=0; } else { start=1; wechsel=1; } if(start==0) { while(schwarz<8 && silber <7) { MotorDir(FWD,FREE); MotorSpeed(110,0); OdometrieData(data); if(data[0]<110 && wechsel!=0) { silber++; wechsel=0; } else if (data[0]>110 && wechsel!=1) { schwarz++; wechsel=1; } SerWrite("Silber: ",8); itoa(silber,zeichen,10); SerWrite(zeichen,sizeof(zeichen)); SerWrite("Schwarz: ",9); itoa(schwarz,zeichen,10); SerWrite(zeichen,sizeof(zeichen)); } } else { while(schwarz<8 && silber <7) { MotorDir(FWD,FREE); MotorSpeed(110,0); OdometrieData(data); if(data[0]<110 && wechsel!=0) { silber++; wechsel=0; } else if (data[0]>110 && wechsel!=1) { schwarz++; wechsel=1; } SerWrite("Silber: ",8); itoa(silber,zeichen,10); SerWrite(zeichen,sizeof(zeichen)); SerWrite("Schwarz: ",9); itoa(schwarz,zeichen,10); SerWrite(zeichen,sizeof(zeichen)); } } MotorSpeed(0,0); MotorDir(FWD,FWD); BackLED(ON,ON); } void undjetzt_links(void) { schwarz=0; silber=0; start=0; wechsel=0; OdometrieData(data); if (data[1]<110) {start=0; wechsel=0;} else {start=1; wechsel=1;} if(start==0) { while(schwarz<8 && silber <7) { MotorDir(FREE,FWD); MotorSpeed(0,110); OdometrieData(data); if(data[1]<110 && wechsel!=0) { silber++; wechsel=0; } else if (data[1]>600 && wechsel!=1) { schwarz++; wechsel=1; } } } else { while(schwarz<8 && silber <7) { MotorDir(FREE,FWD); MotorSpeed(0,110); OdometrieData(data); if(data[1]<110 && wechsel!=0) { silber++; wechsel=0; } else if (data[1]>600 && wechsel!=1) { schwarz++; wechsel=1; } } } MotorSpeed(0,0); MotorDir(FWD,FWD); } int main(void) { Init(); einmalrechts(); undjetzt_links(); return 0; }







Zitieren

Lesezeichen