Leider löst das mein Hauptproblem nicht. Der Robo dreht sich immer noch nur im Kreis...
Leider löst das mein Hauptproblem nicht. Der Robo dreht sich immer noch nur im Kreis...
Kannst du mit deiner IDE simulieren? Da könntest du genau sehen wie das Programm funktioniert. Wenn du nicht simulieren kannst könntest du den Else Zweig auskommentieren und sehen was passiert.
Das Programm sollte eigentlich passen (wenn die Limits passen).
MfG Hannes
Komischerweise macht der Robo GAR nichts, wenn man den Else-Zweig auskommentiert. Das könnte das Problem sein, warum dem so ist, blick ich leider immer noch nicht. Weißt du vllt. woran es noch liegen könnte?
Das ist ganz einfach. Wenn der else Zweig nicht auskommentiert ist und der Robo dreht sich und wenn der else Zweig auskommentiert ist dreht er sich nicht. Was bedeutet das? Der Else Zweig wird ausgeführt.
Ich weiß jedoch nicht warum. Das einzige was ich mir vorstellen kann ist das das Programm nicht dem entspricht das du gepostet hast.
Kannst du das Programm simulieren?
MfG Hannes
Aber eigentlich sollte der Robo doch geradeaus fahren, denn kein Hindernis ist in Sicht. Zudem ist das komische ja, dass er sich nun wieder nur vor und rückwärts bewegt(vorher war das noch anders). Warum er das tut, versteh ich immer noch nicht. Er dreht sich ja nicht mal, nein, er bewegt sich kosequent vor und zurück. Alles bisschen seltsam.
Nein kann ich leider nicht...
EDIT: Wenn ich das Infrarot rausnehme, dann dreht er sich wieder.
Dieses Programm hab ich derzeit auf dem Robo:
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 links 0 #define rechts 1 #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 = links; int abstand = robot.analog(1); int infrarot = robot.analog(3); while(1) { unsigned char Hindernis = true; // unsigned char = 8bit integer von 0 bis 255, braucht weniger Platz im RAM if (Hindernis == false) { abstand = robot.analog (1); robot.motors(250,250); if(abstand < 85) { Hindernis = true; } } else { if(Drehrichtung == links) { robot.motors (200, -200); Drehrichtung = rechts; } else { robot.motors(-100,-100); msleep(100); robot.motors (-200, 200); Drehrichtung = links; } infrarot = robot.analog (3); if ( infrarot < 85) { Hindernis = false; } } msleep(500); } }
Liest du auch meine Posts genau durch? Ich habe im Post 6, 18, 24 geschrieben wo du die Variablen initialisieren musst.
Beim Programmieren geht es um das verstehen. Du verstehst es aber nicht, du schreibst einfach das hin was ich schreibe und das noch nichteinmal richtig (z.B. den Codeausschnitt in Post 24).
Das mit den Einrückungen ist auch extrem unübersichtlich. Schumi hat das schon geschrieben. Dann hat es funktioniert und seit Post 21 funktioniert es wieder nicht.
Versuche die Posts genau durchzulesen und umzusetzen. Wenn es dann nicht funktioniert poste nocheinmal das Programm.
MfG Hannes
Lesezeichen