- LiFePO4 Speicher Test         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 52

Thema: "Hindernisfahrt"

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    15.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    Ich hab gerade mal versucht, deinen Code zu entziffern, aber die Einrückungen machen es wirklich sehr unleserlich. Wenn eine geschweifte Klammer aufgeht, sollte alles darunter eine Stufe weiter rechts stehen, wenn eine geschweifte Klammer zu geht, weiter nach links. Oder wird dein Code durch die Code-Tags übern Haufen geworfen?

    Jedenfalls vermute ich auch mal, dass deine Probleme in der Verschachtelung liegen, hab mindestens eine Stelle gesehen, wo ein elseif oder zumindest ein else angebracht wäre.

    Edit: warum wird eigentlich eine LCD_Bibliothek eingebunden, wenn kein LCD vorhanden ist? Muss ich das verstehen?

    nochmal Edit: ist abstand der Wert, den du vom Entfernungssensor ausliest, um ein Hinternis zu detektieren? Der wird nämlich einmal am Anfang vor der while-Schleife ausgelesen und dann nie wieder...das heißt, der Wert ändert sich nie. Du musst den Sensor bei jedem Schleifendurchlauf auslesen mit
    Code:
    abstand = robot.analog(1);
    sonst kann das gar nix werden...
    Geändert von Geistesblitz (06.01.2014 um 15:23 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.093
    Und wieder "int infrarot = robot.analog(3);" in der while Schleife.

    MfG Hannes

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    28.12.2013
    Beiträge
    25
    Es scheint tatsächlich noch bisschen mehr falsch zu sein. Der Robo zeigt nämlich unterschiedliche Reaktionen beim selben Startpunkt:

    ERSTENS: Beim ersten Starten drehte er sich nur nach links( bis ich nach etwa 20 sec abgeschalten habe)
    ZWEITENS: Er fuhr einmal kurz vor, dann wieder zurück, dann drehte er sich wieder paar mal nach links und fuhr dann ständig nur noch vor und zurück (wieder so nen Ruckeln)

    Hab das dann paar mal ausprobiert, mal kam das eine mal das andere.

    Das kann meiner Meinung nach trotzdem an nichts anderem liegen, als am Infrarot...


    Edit: Nein er fährt definitiv nur nach links, jetzt grade schon mindestens 40 sec.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    31
    Beiträge
    449
    Zitat Zitat von timmy19 Beitrag anzeigen
    ZWEITENS: Er fuhr einmal kurz vor, dann wieder zurück, dann drehte er sich wieder paar mal nach links und fuhr dann ständig nur noch vor und zurück (wieder so nen Ruckeln)
    Irgendetwas kann einfach nicht stimmen. Im gesammten Programm gibt es keine einzige Anweisung, die den Roboter rückwärts fahren lässt (das kann man auch in der tmp_preprozessor.c sehen, kein robot.motors mit zwei negativen Zahlen). Wenn du das Programm fehlerfrei kopiert und auf den Roboter übertragen hast, kann ich in keinster Weise nachvollziehen woher das kommen soll. Bleibt nur noch irgendwelche Softwarespezialitäten von denen man als Außenstehender nichts ahnen kann oder ein Hardwaredefekt.

    Leider kann ich dir hier nicht mehr weiterhelfen

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    28.12.2013
    Beiträge
    25
    Hab zwischen drin auch schon an sowas gedacht, aber irgendwie kann das doch nicht sein.

    Wie könnte man denn in das vorherige Programm nen Infrarot reinbekommen?

    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        95
    #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() 
    {
        unsigned char drehrichtung = geradeaus;    // unsigned char = 8bit integer von 0 bis 255, braucht weniger Platz im RAM
        unsigned char schonNachLinksAusgewichen = False;    
      
        while(1)
        {
            int abstand   = robot.analog(1);
    		//int infrarot  = robot.analog(3);
            if( drehrichtung == geradeaus)
            {
    		robot.motors(25,25); //geradeaus fahren
                if( abstand < hindernis)
                {
                    if(schonNachLinksAusgewichen == False)
                        drehrichtung = linksDrehung;
                    else
                        drehrichtung = rechtsDrehung;
                }
            }
            if( drehrichtung == linksDrehung )
            {
    			
    		    robot.motors(-255, 255); // nach links drehen
    			
                if( abstand >= freieSicht )
                {
                    robot.motors(125,125);
                    schonNachLinksAusgewichen = True;
    				//if( infrarot > 180){
    				//robot.motors(100,-100);
    				//msleep(500);
    				//}
    				
                }
            }
            if( drehrichtung == rechtsDrehung )
            {
                robot.motors(200, -200); // nach rechts drehen
                if( abstand >= freieSicht )
                {
                    robot.motors(100,100);
                    schonNachLinksAusgewichen = False; 
    				//msleep(500);
    				//if( infrarot > 180){
    				//robot.motors(-100,100);
    				//}
    	
    			// Er ist zwar schon mal nach links ausgewichen, aber inzwischen auch schon rechtsrum, also wieder von vorne
    			
    			
    			
    			
    			
    			}  
    		}		  
    	}
    }
    Im Prinzip müsste das Infrarot doch richtig sein oder nicht? Weil darauf reagiert er schlichtweg nicht...

    Edit: Auch da ist sowas seltsam: Wenn ich bei der geradeaus-Schleife die Motoren auf 0 stelle fährt der trotzdem...was ist da los?
    Und der dreht sich, egal was ich einstelle einfach nicht weit genug(der Abstandssensor reagiert nur bis 100, das FreieSicht geht nur bis 170). Was könnte ich da tun?

    Denn irgendein Programm brauch ich, auch wenn es nur halb geht.

Seite 2 von 2 ErsteErste 12

Ä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
  •  

fchao-Sinus-Wechselrichter AliExpress