Genau, während er seine Sensoren misst fährt er einfach weiter. Er zittert nur zwischen fahren und anhalten für eine periode von 200 Milisekunden. Und geht deshalb auf halbe fahrt (von halbe fahrt).
Hier ist meine Vorschlag. Achte auf die BackLEDs.
Code:
int main(void)
{
Init();
unsigned int lineData[2], STOP[2]; // Stopwert seitenabhängig verwalten
unsigned char Beleuchtet[2]; // Sensor wert über STOP-Wert? (boolean)
LineData(lineData); //
LineData(lineData);
STOP[0] = lineData[0]+10; // STOP wert Berechnen (links)
STOP[1] = lineData[1]+10; // STOP wert Berechnen (rechts)
MotorDir(FWD,FWD); // vorwärts
MotorSpeed(180,180);
BackLED(OFF,OFF);
while(1)
{
LineData(lineData);
if (lineData[0] > STOP[0])
{ Beleuchtet[0]=1; // Ich sehe eine Taschenlampe auf Links
}
else Beleuchtet[0]=0; // Ich sehe keine Taschenlampe auf Links
if (lineData[1] > STOP[1])
{ Beleuchtet[1]=1; // Ich sehe eine Taschenlampe auf Rechts
}
else Beleuchtet[1]=0; // Ich sehe keine Taschenlampe auf Rechts
// BackLEDs anschalten gleich wie Beleuchtung: 'Gultig' = ungleich 0 = ON, 'Nicht Gultig' = gleich 0 = OFF
BackLEDs(Beleuchtet[0],Beleuchtet[1]);
// Sonnst kriegen wir keine Ahnung was passiert.
if (Beleuchtet[0] && Beleuchtet[1])
{
// Licht fällt auf Beide Sensoren
MotorDir(BREAK,BREAK);
MotorSpeed(0,0);
}
else
{
// Licht? Macht mich nichts!
MotorDir(FWD,FWD); // Vorwärts wieder!
MotorSpeed(180,180);
}
Msleep(200);
BackLED(OFF,OFF);
}
return 0;
}
Lesezeichen