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
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;
}
Evtl. kann man das noch besser lösen!!?
Lesezeichen