Hiho,
ich habe für die schule gerade die aufgabe die "go()" funktion der asuro.c in eine "kreis()" funktion abzuwandeln. ich hab mir hier schon mal was überlegt,doch da ich zu hause keinen asuro besitze wäre es schön wenn ihr mal ein auge auf den quell code werft und evtl. mal an eurem asuro testet. desweiteren weiß ich nicht genau ob die mathe formeln unten funktionieren z.b. "((radius+11.5)*2*pi)/100" <-- was müsste ich sonst für den ausdruck schreiben unter c?

Hier der Quellcode:
ps: der kreis soll nach einem angegebenen radius fahren, weiteres sieht unten.

void Kreis(int distance, int speed)
{
int enc_count = 0;
int tot_count = 0;
int diff = 0;
int pi = 3,141592654;
int radius = 50; // angabe des radius, den der asuro fahren soll.
int r_rad = ((radius+11.5)*2*pi)/100; //damit berechnet man 1% vom "rechtenrad-umkreis",die 11.5 ist die spannweite zwischen den beiden rädern.
int l_rad = (radius*2*pi)/r_rad; //hier wird berechnet, wie viel % das rechte rad mehr fahren muss.
int speed1 = (speed/100)*l_rad; // speed1 ist der speed, den das rechte rad mehr fahren muss.
int l_speed = speed;
int r_speed = speed+speed1; // normal speed+speed welches das rechte rad mehr fahren muss.
enc_count=abs(distance);


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+speed1) || (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);
}


hoffe mal das mir einer helfen kann, oder verbesserungsvorschläge geben kann

mfg Toschtosch


EDIT: ":" durch "/" ersetzt
und
"int speed1 = (speed/100)*l_rad;"
thx für info