PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm zur Odometrie



natalie
27.12.2005, 11:03
hallo,zusammen
zuerst frohe Weihnachten.
ich habe ein programm zur Messung der Geschwindigkeit bzw. der Winkelgeschwindigkeit der Räder geschrieben.eigentlich wollte ich durch das Terminalprogramm den Wert der Geschwindigkeit bzw. der Winkelgeschwindigkeit der Räder lesen mit Hilfe der Encoder-Funktion.Aber steht in Terminalprogramm immer unbekannte Zeichen.
kann jemand mir mal helfen?ich brauche die Werte dringend #-o #-o
#include "asuro.h"

int fahrgeradeaus(unsigned char MotorDr)
{
Encoder_Init();

int sl=150,sr=150;
int drehungl,drehungr;
unsigned char rl,rr,weg,wl,wr;

Encoder_Set(0,0);
MotorSpeed(sl,sr);
MotorDir(MotorDr,MotorDr);

SerWrite("\n\r encoder links,rechts",23);
PrintInt(encoder[LEFT]);
PrintInt(encoder[RIGHT]);



SerWrite("\n\r spdeed links,rechts",22);
PrintInt(sl);
PrintInt(sr);

drehungl=encoder[LEFT]/(12*5);
drehungr=encoder[RIGHT]/(12*5);
rl=drehungl*12;
rr=drehungr*12;
weg=(rl+rr)/2;
wl=sl/1.9;
wr=sr/1,9;

SerWrite("\n\r fahrweg",10);
PrintInt(weg);

SerWrite("\n\r wl,wr",8);
PrintInt(wl);
PrintInt(wr);

if(encoder[RIGHT]<encoder[LEFT])
{
if(sr<=254) sr++; else sl--;
}
if(encoder[RIGHT]>encoder[LEFT])
{
if(sl<=254) sl++; else sr--;
}
if(encoder[RIGHT]==encoder[LEFT])
{
sl=sr;
}
return 0;
}


int fahrdrehung( int winkel, unsigned char Dir)
{
Encoder_Init();

int segmentsl=0,segmentsr=0,i;
int sl=150,sr=150,drehungl,drehungr;
unsigned char MotorDrl=FWD,MotorDrr=RWD,rl,rr,weg,wl,wr;

if (winkel == 45)
{
segmentsl = 21;
segmentsr = 21;
}
else if (winkel == 90)
{
segmentsl = 41;
segmentsr = 41;
}
else if (winkel == 180)
{
segmentsl = 82;
segmentsr = 82;
}
else if (winkel == 270)
{
segmentsl = 124;
segmentsr = 124;
}
else if (winkel == 360)
{
segmentsl = 165;
segmentsr = 165;
}
else
{
StatusLED(RED);
}

Encoder_Set(0,0);



if(Dir == RIGHT)
{
MotorDrl = FWD;
MotorDrr = RWD;
}

if(Dir == LEFT)
{
MotorDrl = RWD;
MotorDrr = FWD;
}

while((encoder[LEFT] < segmentsl) && (encoder[RIGHT] < segmentsr))
{
MotorDir(MotorDrl,MotorDrr);
MotorSpeed(sl,sr);

if(encoder[LEFT] >= segmentsl)
{
sl = 0;
}

if(encoder[RIGHT] >= segmentsr)
{
sr = 0;
}

if(encoder[LEFT]>=segmentsl && encoder[RIGHT] >= segmentsr)
{
MotorDir(BREAK, BREAK);
for(i=0;1<=100;i++) Sleep(255);
MotorSpeed(0,0);
}

SerWrite("\n\r encoder links,rechts",23);
PrintInt(encoder[LEFT]);
PrintInt(encoder[RIGHT]);

SerWrite("\n\r spdeed links,rechts",22);
PrintInt(sl);
PrintInt(sr);

drehungl=encoder[LEFT]/(12*5);
drehungr=encoder[RIGHT]/(12*5);
rl=drehungl*12;
rr=drehungr*12;
weg=(rl+rr)/2;
wl=sl/1.9;
wr=sr/1,9;

SerWrite("\n\r fahrweg",10);
PrintInt(weg);

SerWrite("\n\r wl,wr",8);
PrintInt(wl);
PrintInt(wr);
}
return 0;
}


int main(void)
{
Init();


int j;
unsigned char taste;

StatusLED(GREEN);


while(1)
{
MotorDir(FWD,FWD);
MotorSpeed(150,150);
fahrgeradeaus(FWD);
taste = PollSwitch();
PrintInt(taste);

if(taste == 0)
{
fahrgeradeaus(FWD);
}
if (taste > 7 && taste < 60 && taste != 12 && taste != 18 && taste != 30)
{
fahrdrehung(45, RIGHT);
}
if (taste > 0 && taste < 8)
{
fahrdrehung(45, LEFT);
}
if (taste == 12 || taste == 18 || taste == 30)
{
for(j=0;j<=50;j++)
{
fahrgeradeaus(RWD);
}
}
}

return 0;
}


vielen Dank für eure Hilfe
natalie

Florian.
27.12.2005, 22:31
Hallo,

ich hab jetzt zwar keine Ahnung von C aber oftmals ist der Fehler eine falsch eingestellte Baudrate. Wichtig ist, dass am PC die gleiche Baudrate eingestellt ist wie im Controller.