Ok.... das ein paar Sachen umsonst rechnet seh ich sofort ein (im neuen Programcode hab ich das alles mal weggelassen, wo ich der Ansicht war, dass es eigentlich nichts bringt).
c und d werden aber verwendet. Sie stehen für die Geschwindigkeiten eines Motors (c fur den linken Motor und d für den rechten Motor). Am Ende des Programmes werden die beiden Variablen verkleinert, um eben den Asuro auf einer geraden Bahn zu halten. Es ollte eigentlich noch eine Funktion her, dass wenn beide Räder den gleichen weg zurücklegen, dass die Geschwindigkeit wieder erhöht wird, den sonst würde der Roboter bald einmal stehen.
Und nein..... es ist das ganze Programm.
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
int a; //Anzahl der gezählten Übergenge links von s zu w und w zu s
int b; //Anzahl der gezählten Übergenge rechts von s zu w und w zu s
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 || dh_l < -200)
{
a++;
}
if( data[1] - L_alt_r[0] > 200 || data[1] - L_alt_r[0] < -200)
{
b++;
}
if( a < b)
{
d--; //Geschwindigkeit des rechten Motors verkleinern
}
if( a > b)
{
c--; //Geschwindigkeit des rechten Motors verkleinern
}
}
}
mfg Chrise
Lesezeichen