Hallo
Ohne IR-Messung mit selbstgemalten Linien sieht es nun so aus:
Bild hier Bild hier
Allerdings klappt es mit den "Weichen" noch nicht so recht:
Video3 Video4
Das Problem ist das permanente aktuallisieren der Min/Max-Linienwerte. Das muss ich noch mal überdenken...
Code:
#include "../inc/asuro.h"
#include "../inc/asuro.c"
#define schwelle 15
#define power 175
unsigned char pow_l, pow_r, dir_l, dir_r;
unsigned int data[2], suchen;
unsigned int h_l, h_r, d_l, d_r;
int main(void) {
Init();
FrontLED(ON);
dir_l=dir_r=FWD;
pow_l=pow_r=power;
d_l=d_r=0;
h_l=h_r=1023;
MotorDir(dir_l,dir_r);
MotorSpeed(pow_l,pow_r);
suchen=0;
do{
LineData(data);
BackLED(OFF,OFF);
if ((data[0]-schwelle < d_l) && (data[1]-schwelle < d_r)) {
dir_l=dir_r=FWD;
pow_l=255-data[0];
pow_r=255-data[1];
suchen=0;
StatusLED(GREEN);
BackLED(ON,ON);
} else {
if (data[1]-schwelle > data[0]) {
pow_l=0;
pow_r=power;
d_l=(d_l+data[0])/2;
h_r=(h_r+data[1])/2;
suchen=1;
StatusLED(YELLOW);
BackLED(OFF,ON);
}
if (data[0]-schwelle > data[1]) {
pow_l=power;
pow_r=0;
h_l=(h_l+data[0])/2;
d_r=(d_r+data[1])/2;
suchen=1;
StatusLED(YELLOW);
BackLED(ON,OFF);
}
if (suchen==1) {
if ((h_l-schwelle < data[0]) && (h_r-schwelle < data[1])) {
StatusLED(RED);
if (pow_l==0) { dir_l=RWD; pow_l=power; }
if (pow_r==0) { dir_r=RWD; pow_r=power; }
}
suchen=2;
}
}
MotorDir(dir_l,dir_r);
MotorSpeed(pow_l,pow_r);
}while (1);
return 0;
}
Gruß
mic
Lesezeichen