Du solltest dir unbedingt eine übersichtliche Einrückung angewöhnen! Das unterschätzt man als Anfänger, aber sowas erhöht die Lesbarkeit ungemein
(und dann kommt auch nicht so ein Durcheinander raus, z.B. zu viele { und } (nach main) oder eine Variable zwei mal als Int deklariert (i) usw)
So ganz kann ich deinen Code auch nicht nachvollziehen wenn ich ehrlich bin (was soll "mitt" sein?).. Aber ich glaube dein Hauptproblem ist, dass du bei einem Abstand von <75 (also z.B. 74) kurz (300ms) nach links drehst, und dann gleich wieder geradeaus fährst weil der Abstand jetzt ja >75 (also z.B. 76) ist. Somit zuckelt der Robo nur etwas umher...
Als inspiration (sollte eigentlich lauffähig sein wenn ich keine Tippfehler gemacht habe und dein Sensor einen Abstand von 120 messen kann):
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;
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);
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 )
{
drehrichtung = geradeaus;
schonNachLinksAusgewichen = True;
}
}
if( drehrichtung == rechtsDrehung )
{
robot.motors(200, -200); // nach rechts drehen
if( abstand >= freieSicht )
{
drehrichtung = geradeaus;
schonNachLinksAusgewichen = False; // Er ist zwar schon mal nach links ausgewichen, aber inzwischen auch schon rechtsrum, also wieder von vorne
}
}
}
}
Lesezeichen