-
hallöchen leute, kam gerad nach hause und wollte einfach nochmal kurz in meine daten reinschauen, habe den compiler installiert und ma ein "test" programm geschrieben... also laut compiler gibt es keine fehler bei der umgeschriebenen kreis() funktion.. wäre super nett wenn mal einer kurz sein asuro flashen könnte und gucken kann ob alles so funktioniert wie es funzen sollte.
kreis():
Code:
/***************************************************************************
* void Kreis(int distance, double speed = 150)
*
* input
* distance: postiv->go forward ; negativ-> go backward
* speed: sets motorspeed
*
***************************************************************************/
void Kreis(int distance, double speed)
{
int enc_count = 0;
int tot_count = 0;
int diff = 0;
double pi = 3.141592654;
double radius = 50;
double r_rad = ((radius+11.5)*2*pi)/100;
double l_rad = (radius*2*pi)/r_rad;
double speed1 = (speed/100)*l_rad;
double l_speed = speed;
double r_speed = speed+speed1;
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);
}
testprogramm könnte z.b. so aussehen
Code:
#include "asuro.h"
#include <stdlib.h>
int main(void)
{
FrontLED(ON);
StatusLED(GREEN);
Kreis(100,110);
}
mfg Toschtosch und gute nacht^^
-
Soweit ich weiss unterstüzt der GNU-AVR C Compiler kein double format. Er unterstützt single precession.
Bei kleinen Mikrokontrollern versucht man möglichst ohne Fließkommaarithmetik auszukommen, da bei der Einbindung der Rechenfunktionen sehr viel Speicher verbraucht wird.
Gruss,
stochri
-
naja, aber ohne die mathematischen formeln kann der asuro auch schlecht via radius einen kreis fahren :)
hmm, irgendwie doof
-
mal ne kleine frage, kann ich anstatt von double nich die gleitkommazahlen in "float" berechnen? oder unterstützt der avr compiler auch kein float? ich find irgendwie nich was der compiler unterstützt und was nich
mfg toschtosch