- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 52

Thema: "Hindernisfahrt"

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    28.12.2013
    Beiträge
    25
    Ach du meine Güte, sorry. Hab das komplett falsch verstanden und geändert. Aber auch nachdem ich es geändert habe, dreht sich der Robo einfach nur linksherum.
    Tut mir leid, aber meine Datei ist ne cc und die kann man hier scheinbar nicht hochladen...

    Ich habe leider kein LED, dementsprechend kann ich auch keine Werte messen, das hatten wir schon in der Schule gemacht.

    ____
    Achso, jetzt versteh ich, soweit bin ich aber glaub noch nicht, dass ich das könnte. Wie man denke ich merkt, bin ich blutiger Anfänger.

    Da ich es nicht hochladen kann, hier mal der Code so:

    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 links		    1
    #define rechts          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
    	int abstand = robot.analog(1);
    	int infrarot = robot.analog(3);
      
        while(1)
    {
    unsigned char Hindernis = false ;
    
    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 (-200, 200);
    Drehrichtung = links;
    }
    
    infrarot = robot.analog (3);
    
    if ( infrarot < 85)
    {
    Hindernis = false;
    }
    }
    msleep(500);
    }
    }

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.091
    Was mir schon einmal auffällt ist das du in der while Schleife ("while(1)") "unsigned char Hindernis = false;" steht. Gehe einmal durch was das Programm macht. Normalerweise müsste sich der Roboter immer nach vorne bewegen. Du sagst vor der if Schleife immer das Hindernis falsch ist und somit wird nur der if... Zweig und nie der else Zweig ausgeführt.

    Gleichzeitig gibts du das "#define geradeaus 0" weg. Stattdessen weißt du links 0 zu und rechts 1.

    Wenn du vor dem links bzw rechtsdrehen noch zurückfahren willst kannst du so schreiben:
    Code:
    if (drehrichtung == links)
    {
    robot.motors (-100, -100); msleep(100); robot.motors (-200, 200); drehrichtung = rechts;
    }
    MfG Hannes

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.12.2013
    Beiträge
    25
    Leider löst das mein Hauptproblem nicht. Der Robo dreht sich immer noch nur im Kreis...

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.091
    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

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    28.12.2013
    Beiträge
    25
    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?

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.091
    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

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    28.12.2013
    Beiträge
    25
    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);
    }
    }

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 01.11.2017, 12:53
  2. Antworten: 2
    Letzter Beitrag: 15.06.2011, 21:18
  3. LPC1114 (Cortex M0): "sei()" und "cli()"
    Von Jaecko im Forum ARM - 32-bit-Mikrocontroller-Architektur
    Antworten: 1
    Letzter Beitrag: 02.07.2010, 12:25
  4. "Soft-Reset?" und "Finger-Interrupt?"
    Von trapperjohn im Forum Asuro
    Antworten: 8
    Letzter Beitrag: 10.06.2008, 23:02
  5. ASM: was machen "swap" und "cbr" genau?
    Von RHS im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 18.08.2004, 17:16

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test