Du prüfst in deinem Programm auf geradeaus, linksdrehung und rechtsdrehung. Ich würde aber zuerst einmal nur prüfen ob du geradeausfährst oder ausweichen musst.
Also nur die while Schleife. Die Variable musst du vorher initialisieren. Vor der While Schleife "int abstand",... Dann brauchst du die Variable nur verwenden.
Code:
while(1)
{abstand = robot.analog (1);
if (abstand < 85)
{
Hindernis = true;
}
if (Hindernis == false)
{
robot.motors (-250, -250);
}
else
{
if (Drehrichtung == links)
{
robot.motors (200, -200);
Drehrichtung = rechts;
}
else
{
robot.motors (-200, 200);
Drehrichtung = links;
}
infrarot = robot.analog (3);
if ( infrarot < 85)
{
Hindernis = false;
}
}
msleep(500);
}
Das Programm sollte so funktionieren. Was hast du als Hindernis genommen. Je nach Objekt könnte es Probleme geben. Glatte Objekte (z.B. Bücher) 90° zum Sensor ist optimal, sollte auch nicht zu klein sein. Flaschen o.Ä. ist nicht optimal, da eigentlich nur die Fläche den Schall Richtung Sensor wirft der 90° zum Sensor steht.
Hast du Leds die du ansteuern kannst? So kannst du die Messwerte testen die vom Sensor kommen, du könntest auch die Motoren nehmen. Sensorwert direkt an den Motor geben.
Code:
i = robot.analog (1);
robot.motors (i, 0);
msleep(300);
Am Besten wäre es dann wenn du den Roboter anheben kannst und ein Objekt vom oder zum Sensor bewegst. Dann sollte sich die Motordrehzahl ändern.
MfG Hannes
Lesezeichen