Hallo m.a.r.v.i.n,
ich finde es schade, dass man immer noch die Werte für- MY_ODO_DARK_VALUE_R
MY_ODO_LIGHT_VALUE_R
MY_ODO_DARK_VALUE_L
MY_ODO_LIGHT_VALUE_L
selbst ermitteln muss. Dabei wurden doch im Thread "Regelung fürs Geradeausfahren" schöne Ideen gesammelt wie's besser gehen könnte. Und dabei auch noch Umgebungslichtstabil ist. Hier einfach mal mein Vorschlag. Vielleicht findet er ja seinen Weg in die nächste Lib ?!
Code:
SIGNAL (SIG_ADC)
{
const static unsigned char admux[]={
(1 << ADLAR) | (1 << REFS0) | WHEEL_LEFT,
(1 << ADLAR) | (1 << REFS0) | WHEEL_RIGHT};
static int tmp [2], flag [2]={1,1};
static unsigned char toggle = FALSE;
if (autoencode)
{
int sensor = ADCH;
ADMUX = admux[toggle];
tmp[toggle]+=(sensor-tmp[toggle])>>2;
if (flag[toggle]*(sensor-tmp[toggle]) > 2)
{
encoder[toggle]++;
flag [toggle] = -flag [toggle];
}
toggle^=1;
}
}
Bei mir macht der Code (auch bei schlechten Sensorwerten) eine gute Figur und ist auch bei allen Lichtverhältnissen und sogar bei starken und plötzlichen Lichtschwankungen stabil. (Also, mechanisches abdecken der Sensoren, um sie vor störendem Umgebungslicht zu schützen, ist nicht mehr nötig.)
Lesezeichen