Hallo
Mit SPEED gibt man die maximale Geschwindigkeit an, mit STEP die Stärke der Reaktion auf eine Abweichung von der Linie. Diese Reaktion sollte man noch vom Helligkeitsunterschied abhängig machen:
Code:
#include "asuro.h"
#define SPEED 175
#define STEP 5
int speedLeft,speedRight;
unsigned int lineData[2];
int ADOffset;
void LineLeft (void)
{
speedLeft += STEP;
if (speedLeft > SPEED)
{
speedLeft = SPEED;
speedRight -= STEP;
}
}
void LineRight (void)
{
speedRight += STEP;
if (speedRight > SPEED)
{
speedRight = SPEED;
speedLeft -= STEP;
}
}
int main(void)
{
int i;
unsigned char j;
Init();
FrontLED(ON);
for (j = 0; j < 0xFF; j++) LineData(lineData);
LineData(lineData);
ADOffset = lineData[0] - lineData[1];
speedLeft = speedRight = SPEED;
for(;;) {
LineData(lineData);
i = (lineData[0] - lineData[1]) - ADOffset;
if ( i > 4) {
StatusLED(GREEN);
LineLeft();
}
else if ( i < -4) {
StatusLED(RED);
LineRight();
}
else {
StatusLED(OFF);
speedLeft = speedRight = SPEED;
}
MotorSpeed(speedLeft,speedRight);
}
return(0);
}
Ich kann es nicht testen weil mein asuro grad zerlegt ist.
speedLeft = speedRight = SPEED;
Das ist kritisch weil nicht sicher ist ob beide Seiten bei gleicher SPEED gleichschnell drehen wenn wir genau auf der Linie sind.
Bauchgefühlsmässig könnte nach dem MotorSpeed(speedLeft,speedRight); noch ein Sleep(100); reinpassen.
Gruß
mic
Lesezeichen