Seltsam. Hab es jetzt mal anders gemacht, nämlich ihn manuell geradeaus fahren lassen, nicht mit dem Befehl "drehrichtung = geradeaus", dann klappt es komischerweise. Die Technik ist manchmal verwirrend.
Ja, der Roboter ist es. Wir sollen das Hindernisumfahren aber mit einem Infrarotsensor regeln, denn wir haben ein Boden, der eingefärbt ist(dunkel zu hell zu dunkel). Zudem ist die Seitenbegrenzung nicht so hoch, dass man sie mit dem Ultraschall sehen könnte.
Nun meine weitere Frage: Glaubt ihr, der folgende Code könnte im Prinzip funktionieren? Mein Problem war bisher, dass sich der Robo nur gedreht hat, da er sich beim dunklen Boden drehen sollte. Aber eigentlich wollte ich das erst, nachdem er das erste Hindernis entdeckt, die Drehung gemacht und richtung "freier" Seite gefahren ist. Wie kann ich das schreiben, sodass er sich nicht "verwirren" lässt?
Code:
#include "qfixMiniBoard.h"
#include "qfixLCD.h"
const int SENSOR3 = 3;
int SENSOR1 = 1;
int SENSOR2 = 2;
int SENSOR = 0;
MiniBoard robot;
LCD lcd;
#define geradeaus 0
#define linksDrehung 1
#define rechtsDrehung 2
#define hindernis 75
#define freieSicht 120 // Wenn der Robo etwas nach links fährt, aber dann gegen das Hindernis, ist dieser Wert zu klein
#define True 1
#define False 0
int main()
{
int abstand=0;
//int infrarot= 0;
unsigned char drehrichtung = geradeaus; // unsigned char = 8bit integer von 0 bis 255, braucht weniger Platz im RAM
unsigned char schonNachLinksAusgewichen = False;
while(1)
{
abstand = robot.analog(1);
//infrarot = robot.analog(3);
if( drehrichtung == geradeaus)
{
robot.motors(-250,-250); //geradeaus fahren
if( abstand < hindernis)
{
if(schonNachLinksAusgewichen == False)
drehrichtung = linksDrehung;
else
drehrichtung = rechtsDrehung;
}
}
if( drehrichtung == linksDrehung )
{
robot.motors(-200, 200); // nach links drehen
if( abstand >= freieSicht )
{
robot.motors(250,250)
schonNachLinksAusgewichen = True;
//msleep(500);
//if( infrarot > 185){
//robot.motors(100,-100);
//msleep(500);
}
}
if( drehrichtung == rechtsDrehung )
{
robot.motors(200, -200); // nach rechts drehen
if( abstand >= freieSicht )
{
robot.motors(250,250)
schonNachLinksAusgewichen = False;
//msleep(500);
//if( infrarot > 185){
//robot.motors(-100,100);
// Er ist zwar schon mal nach links ausgewichen, aber inzwischen auch schon rechtsrum, also wieder von vorne
}
}
}
}
Lesezeichen