Hallo Leute ich hab ein Problem mit der Odometrie. Wenn ich follgendes Programm flash, aus Mehr Spaß mit ASURO Band II etwas modofieziert:
Code:
#include "asuro.h"
/*Schwellwert für die Hell-/Dunkel-Unterscheidung. Eventuell muss damit etwas variiert werden.*/
#define TRIGGERLEVEL 600
#define HYSTERSIS 10
#define LOW 0
#define HIGH 1
#define SPEED 255
int main(void)
{
unsigned int data[2];
signed int status[2] = {0, 0};
signed int difference = 0;
Init();
MotorDir(FWD, FWD);
MotorSpeed(SPEED, SPEED);
while(1)
{
OdometrieData(data);
if ((status[0]==LOW) && (data[0]>TRIGGERLEVEL+HYSTERSIS)) /*Wenn linker Sensor von niedrig auf hoch wechselt*/
{
status[0]=HIGH;
difference++;
}
if ((status[0]==HIGH) && (data[0]<TRIGGERLEVEL-HYSTERSIS)) /*Wenn linker Sensor von hoch auf niedrig wechselt*/
{
status[0]=LOW;
difference++;
}
if ((status[1]==LOW) && (data[1]>TRIGGERLEVEL+HYSTERSIS)) /*Wenn rechter Sensor von niedrig auf hoch wechselt*/
{
status[1]=HIGH;
difference--;
}
if ((status[1]==HIGH) && (data[1]<TRIGGERLEVEL-HYSTERSIS)) /*Wenn rechter Sensor von hoch auf neidrig wechselt*/
{
status[1]=LOW;
difference--;
}
PrintInt (difference);
if (difference<-SPEED) /*Sicherheitsabfragen*/
{
difference=-SPEED;
}
if (difference>SPEED)
{
difference=SPEED;
}
if (difference>0)
{
MotorSpeed(SPEED-difference, SPEED); /*Motoren einstellen*/
}
else if (difference<0)
{
MotorSpeed(SPEED, SPEED+difference);
}
if (SPEED-difference<=100)
{
difference=0;
}
}
}
Wenn ich dann die Daten abfrage kommt folgendes:
Code:
00000011111.....206206206206.......
und wenn 206 kommt bleibt das rechte Rad stehen. Könnte es ein Hardwaredefekt sein oder ist im Programm ein Fehler?
Vielen Dank im vorraus.
Lesezeichen