- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 3 von 3

Thema: frage zu eigenem programm

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.01.2008
    Ort
    Allgäu
    Alter
    37
    Beiträge
    220

    frage zu eigenem programm

    Anzeige

    E-Bike
    hallo leute, hab gerade folgendes kleine programm geschrieben.... leider funktioniert es nicht wie gewollt... der roboter fährt nämlich die gesamte strecke von einem meter ab und bleibt nicht wie gewollt nach 2sekunden stehen.... kann mir vielleicht jemand sagen warum? hier mein programm:

    #include "RP6RobotBaseLib.h"



    int main(void)
    {
    initRobotBase(); // Mikrocontroller initialisieren


    powerON();

    startStopwatch1();



    while(true)
    {
    move(60,FWD,DIST_MM(1000),true);
    if(getStopwatch1()>2000)
    {move(0,FWD,DIST_MM(0),true);
    setStopwatch1(0);}
    task_RP6System();
    }
    return 0;
    }

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    02.03.2008
    Ort
    Kärnten
    Alter
    34
    Beiträge
    10
    ganz einfach

    move(60,FWD,DIST_MM(1000),true);

    wird jedesmal ausgeführt und deswegen fährt er weiter.
    Für was brauchst du eigentlich eine while Schleife?


    #include "RP6RobotBaseLib.h"

    int main(void)
    {
    initRobotBase(); // Mikrocontroller initialisieren

    powerON();
    move(60,FWD,DIST_MM(1000),true);
    startStopwatch1();

    while(true)
    {
    if(getStopwatch1()>2000)
    {move(0,FWD,DIST_MM(0),true);
    setStopwatch1(0);}
    task_RP6System();
    }
    return 0;
    }

    so sollte es funktionieren

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.01.2008
    Ort
    Zürich
    Beiträge
    604
    Hi,

    nein, nicht ganz, da wenn ich das richtig verstanden habe mit dem TRUE am ende in den Klammern bei Fahrbefehlen die blockierende Funktion auf ON gesetzt wird, d.h., dass er zuerst 1m fährt, dann guckt, was die Stopwatch sagt und dann wieder in die while-Schleife zurückkehrt.

    es guckt glaub ich so aus:

    Code:
    #include "RP6RobotBaseLib.h" 
    
    
    
    int main(void) 
    { 
    initRobotBase(); // Mikrocontroller initialisieren 
    
    
    powerON(); //Sensoren etc. an
    move(60,FWD,DIST_MM(1000),0); //losfahren
    startStopwatch1(); //Stopwatch starten
    
    
    
    while(true) 
    { 
     //hier also kein move
    if(getStopwatch1()>2000) //Stopwatch checken
    {moveAtSpeed(0,0);  //nichmehr fahren
    setStopwatch1(0);}  //stopwatch zurücksetzen
    task_RP6System(); //Robbys System abfragen
    } 
    return 0; 
    }
    sry, ich wusste nichmehr ob es wrong oder false ist, also hab ich ne 0 verwendet, das ist das gleiche

    Ach ja, ich würde dir empfehlen für zeitgesteuerte Sachen immer
    moveAtSpeed(leftspeed,rightspeed);
    zu verwenden. Damit hast du dann die blockierende Funktion nie drin und dein Timing funktioniert auch.

    Theoretisch könntest du ihn mit

    Code:
    void zeitFahren(int zeit_x, int speed_x, int speed_y){
    int zeit_x, speed_x, speed_y;
    if(getStopwatch1()<zeit_x){
    moveAtSpeed(speed_x,speed_y);
    mSleep(1)
    moveAtSpeed(0,0);
    }
    if(getStopwatch1<zeit_x){
    zeit_x--;
    zeitFahren(zeit_x, speed_x, speed_y);}
    }
    genau 2 Sekunden lang fahren lassen

    /*ich hoffe, ich hab nix vergessen, in dem kleinen Kurz Antwort Fenster ist das so unübersichtlich...*/

    naja, viel Spass noch!!

    MfG Pr0gm4n

Berechtigungen

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

Solar Speicher und Akkus Tests