Keine Angst, ich lese mir die Beiträge schon genau durch. Ich habe die Anweisungen mit den Variablen auch so umgesetzt gehabt, nur zwischen drin klappte das dann nicht mehr... ist jetzt auch egal.
Und doch, Schumis Programm klappt bis auf die Tatsache, dass der Robo erst minimal vor dem Hindernis dreht und die Infrarotsteuerung(die klappt immer noch nicht...) Es klappt wahrscheinlich aber nur, weil da ohne Else-Steuerung gearbeitet wird. Um weiter zu kommen, wäre es vllt. sinnvoll, die Else-Steuerung(so leid es mir tut, sowohl um deine Arbeit, als auch darum da ich es gerne so gemacht hätte, da es schicker aussieht), weg zulassen und an dem anderen Programm weiterzuarbeiten.
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 85
#define freieSicht 150 // 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()
{
unsigned char drehrichtung = geradeaus; // unsigned char = 8bit integer von 0 bis 255, braucht weniger Platz im RAM
unsigned char schonNachLinksAusgewichen = False;
int abstand = robot.analog(1);
int infrarot = robot.analog(3);
while(1)
{
if( drehrichtung == geradeaus)
{
robot.motors(100,100); //geradeaus fahren
if( abstand < 150)
{
if(schonNachLinksAusgewichen == False)
drehrichtung = linksDrehung;
else
drehrichtung = rechtsDrehung;
}
}
if( drehrichtung == linksDrehung )
{
robot.motors(-100,-100);
msleep(100);
robot.motors(-150, 150); // nach links drehen
msleep(300);
if( abstand >= 150 )
{
robot.motors(100,100);
msleep(500);
schonNachLinksAusgewichen = True;
if( infrarot < 150){
robot.motors(100,-100);
msleep(500);
}
}
if( drehrichtung == rechtsDrehung )
{
robot.motors(150, -150); // nach rechts drehen
msleep(300);
if( abstand >= 150 )
{
robot.motors(-100, -100);
msleep(100);
robot.motors(100,100);
msleep(500);
schonNachLinksAusgewichen = False;
int infrarot = robot.analog(3);
if( infrarot < 150){
robot.motors(-100,100);
msleep(500);
// Er ist zwar schon mal nach links ausgewichen, aber inzwischen auch schon rechtsrum, also wieder von vorne
}
}
}
}
}
}
Wie gesagt: Das hier funktioniert soweit(arbeite sozusagen an zwei Versionen gleichzeitig), dass der Robo fährt, sich dann minimal vor dem Hindernis dreht. Die Rücksteuerung per Infrarot wäre jetzt das nächste, was ich gerne versuchen würde, vllt. klappt es dann ja. Würde mich extrem freuen. 
Also, weißt du, was hier der Fehler an der Infrarotsteuerung sein könnte? Ich sehe keinen und weiß deshalb nicht was ändern.
_____
Bei dem mit der Else-Schleife bleibt das Problem, dass er sich nur dreht. Hab schon ein paar Dinge verändert, aber immer dasselbe Problem, er scheint den "If-Teil" einfach nicht auszuführen.
Lesezeichen