Hallo!!
Endlich hab ich mal wieder Zeit gefunden um mich mit dem asuro zu beschäftigen.
Ich hab mich mal an die Odometrie gewagt und eigentlich meiner Meinung nach ein nicht so schlechtes Programm geschriebenm welches nur leider nicht funktioniert.
Code:
#include "asuro.h"
int main (void)
{
unsigned int data[2];
unsigned int L_alt_l[1]; //Letzte Wert des linken Fototransistors
unsigned int L_alt_r[1]; //Letzte Wert des rechten Fototransistors
float n_l;
float n_r;
int a; //Hilfsvariable
int b; //Hilfsvariable
unsigned char c; //Wert für die Geschwindigkeit des linken Motors
unsigned char d; //Wert für die Geschwindigkeit des rechten Motors
int dh_l;
a = 0;
b = 0;
c = 140; // Wert für linken Motor bestimmen
d = 140; // Wert für rechten Motor bestimmen
Init();
OdometrieData(data);
MotorDir(FWD, FWD);
while(1)
{
MotorSpeed(c, d);
L_alt_l[0] = data[0];
L_alt_r[0] = data[1];
OdometrieData(data);
dh_l = data[0] - L_alt_l[0];
if( dh_l > 200)
{
a++;
n_l=a/8; //Umdrehungen in der Zeit t
}
if( data[1] - L_alt_r[0] > 200 || data[1] - L_alt_r[0] < -200)
{
b++;
n_r=b/8; //Umdrehungen in der Zeit t
}
if( n_l < n_r)
{
d--; //Geschwindigkeit des rechten Motors verkleinern
}
if( n_l > n_r)
{
c--; //Geschwindigkeit des rechten Motors verkleinern
}
}
}
könnt ihr da vielleicht wo nen Fehler entdecken, oder ist das ganze generell falsch was ich da mache? Bitte nicht wunder das ich im unteren Teil für die Berechnung der Differenz zwei verschieden Methoden angewandt habe, will damit nur zeige das es mit keiner der zwei funktioniert.
mfg Chrise
Lesezeichen