- LiFePO4 Speicher Test         
Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 40 von 255

Thema: IR-bake

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi,
    Es hilft mir nicht weiter mich mit dem großen plan (den ich ja im prinzip hab!) zu beschäftigen, wenn mir das handwerkszeug fehlt um eine funktionierende verschachtelte if-abfragen-schleife zu erstellen. Beispielsweise move- und rotate- funktion, in abhängigkeit von IR-empfang und abgelaufener zeit,...
    Ich denke, es geht vielleicht nicht nur ums Handwerk.
    Erklär doch mal (als "Ablaufschema" oder Wenn-Dann-Abfolge), was du in der "verschachtelten if-abfragen-schleife" machen willst! Wenn (auch) ich die Logik verstehe, dann kommt die Umsetzung im 2. Schritt schon ... ... irgendwie ... ... oder ...
    Gruß
    Dirk

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    hi Thorben,

    ich bin da unsicher:
    gerade an der stelle hatte ich glaube ich schon alle variationen getestet. Nur break, nur stop, break/stop, stop/break. Die variante break/stop schien mir noch die "erfolgreichste" zu sein - zumindest manchmal passierte beides - er veließ die schleife UND die motoren blieben stehen.

    Ich glaube dass es etwas mit der dauer der betätigung der bumper zu tun hat, beim kurzen antippen dreht sich der RP6 anschließend im kreis, bei einer längeren betätigung bleibt er eher stehen...

    - - - Aktualisiert - - -

    ich hab jetzt die reihenfolge noch einmal geändert, zuerst stop(); und dann break;

    so lange er nach rechts dreht, bleibt er beim betätigen des bumpers stehen

    wenn er geradeaus fährt, fängt er nach der betätigung des bumpers sich nach rechts zu drehen, mal schneller, mal langsam, er misst nicht dabei, erst wenn ich den button3 betätige, also quasi den case3: noch einmal auslöse, fängt er auch an zu messen und fährt dann (nach empfang) geradeaus wieder richtung bake. Wo im code passiert das? verstehe ich nicht...
    gruß inka

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    hi allerseits,

    eigentlich wollte ich hier ein video reinstellen, dass alles klappt, klappt ja auch aber nur im prinzip. Der RP6 findet brav die bake, fährt hin, bleibt aber per abfrage der bumper nicht zuverlässig genung stehen. mal tut er das, dann wieder nicht, ich glaube, ich habe nun in dem code die möglichkeiten die bumperabfrage zu plazieren ziemlich ausgeschöpft...

    Code:
                task_checkINT0();
                task_I2CTWI();
               if(bumper_left && bumper_right)
               {
                break;
                stop();
                }
    bzw. am ende der do-while schleife:

    Code:
    while(!bumper_left && !bumper_right);
                        break;
                        stop();
    evtl. liegt dort das problem, die abfrage der beiden task liegt innerhalb (am ende) der do-whileschleife? Könnte sich bitte jemand den code anschauen?

    das wird oberhalb der hauptschleife aufgerufen:

    Code:
    I2CTWI_initMaster(100);
        I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
        I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady);


    Code:
    case 3://
                    setLEDs(0b0100);
    
                    writeString_P("suche der bake   \n");
                    writeChar('\n');
                    initRP6Control();
                    initLCD();
                    startStopwatch3();
                    t=0;
    
                    while(true)
                    {
                        do
                        {
    
                            if(getStopwatch3() > 50)
                            {
                                temp = read_IR_value();
    
                                if (temp == 0)
                                {
                                    x = getStopwatch3();
                                    setMultiIOLED3(1);
                                    setMultiIOLED3(0);
                                    if (t<10)
                                    {
                                    t++;
    
                                    if (t == 10)
                                    {
                                    y = getStopwatch3();
                                    z = y-x;
                                    t=0;
                                    setStopwatch3(0);
                                    if (z< 600)
                                    {
                                    move(100, FWD, DIST_MM(100), false);
                                    setStopwatch3(0);
                                    t=0;
                                    mSleep(400);
                                    task_checkINT0();
                                    task_I2CTWI();
                                    if(bumper_left && bumper_right)
                                    {
                                    break;
                                    stop();
                                    }
    
                                    }
    
                                    }
    
                                    }
    
    
                                }
    
                                else
                                {
                                    setMultiIOLED1(1);
                                    setMultiIOLED1(0);
                                    rotate(80, RIGHT, 1, false);
                                    setStopwatch3(0);
                                }
                                task_checkINT0();
                                task_I2CTWI();
                                if(bumper_left && bumper_right)
                                {
                                break;
                                stop();
                                }
    
                            }
    
                        task_checkINT0();
                        task_I2CTWI();
                        }
                        while(!bumper_left && !bumper_right);
                        break;
                        stop();
    
                        /**************************/
                        uint8_t key_1;
                        mSleep(100);
                        key_1 = getMultiIOPressedButtonNumber();
                        if(key_1 != 0) break;
                        stop();
                        /**************************/
                    }
    
                        break;
    Geändert von inka (03.02.2014 um 14:46 Uhr)
    gruß inka

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied Avatar von Thorben W
    Registriert seit
    17.02.2012
    Ort
    Niedersachsen
    Beiträge
    108
    Muss das break; nicht hinter das stop();?
    Weil bei break wird die Schleife verlassen:
    break

    Mit dem Schlüsselwort break können wir zu jeder Zeit eine Schleife verlassen, ohne auf den Kontrollpunkt warten zu müssen.

    http://www.c-howto.de/tutorial-schleifen-break.html

    gruß Thorben

Seite 4 von 4 ErsteErste ... 234

Ähnliche Themen

  1. IR-Bake
    Von tornado im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 05.07.2007, 17:37
  2. IR-Bake
    Von Bernd-das-Brot im Forum Sensoren / Sensorik
    Antworten: 38
    Letzter Beitrag: 13.12.2005, 16:14
  3. ir-bake
    Von pebisoft im Forum Vorstellungen+Bilder von fertigen Projekten/Bots
    Antworten: 8
    Letzter Beitrag: 17.01.2005, 13:41
  4. ir-bake
    Von pebisoft im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 17.01.2005, 07:01
  5. Bake
    Von techboy im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 02.11.2004, 10:17

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress