Hi Peda,
bei der Odometrie habe ich folgendes gemacht:
Zuerst wird Min und Max des linken und rechten Sensors ermittelt (in dem ich den Asuro einfach für ein paar Umdrehungen fahren lasse und die Odometrie auswerte).
Anhand dieser Werte kannst ich dann prüfen, ob der Sensor nun hell oder dunkel ist. Anbei ein kleines Beispiel-Programm.
Viele Grüße
Jens
Code:
#include "asuro.h"
#define DUNKEL 0
#define HELL 1
unsigned int lowLeft = 512;
unsigned int highLeft = 512;
unsigned int lowRight = 512;
unsigned int highRight = 512;
unsigned char getLeftStatus(unsigned int data) {
unsigned int diffLow = data - lowLeft;
unsigned int diffHigh = highLeft - data;
if (diffLow < diffHigh) {
return OFF;
} else {
return ON;
}
}
unsigned char getRightStatus(unsigned int data) {
unsigned int diffLow = data - lowRight;
unsigned int diffHigh = highRight - data;
if (diffLow < diffHigh) {
return OFF;
} else {
return ON;
}
}
int main(void) {
Init();
unsigned int speed = 100;
MotorSpeed(speed, speed);
unsigned int data[2];
unsigned int i;
for (i = 0; i < 1000; i++) {
OdometrieData(data);
//LEFT
if (data[0] < lowLeft) {
lowLeft = data[0];
} else if (data[0] > highLeft) {
highLeft = data[0];
}
//RIGHT
if (data[1] < lowRight) {
lowRight = data[1];
} else if (data[1] > highRight) {
highRight = data[1];
}
}
while (TRUE) {
OdometrieData(data);
BackLED(getLeftStatus(data[0]), getRightStatus(data[1]));
}
return 0;
}
Lesezeichen