- Labornetzteil AliExpress         
Ergebnis 1 bis 5 von 5

Thema: Programm frage

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    25.07.2012
    Beiträge
    47

    Programm frage

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    ich habe mich jetzt einige Std. mit den Beispielen beschäftig so langsam versteh ich das ganze, aber ich habe fragen zu ein paar sachen zu denen ich noch nichts gefunden habe und die ich nicht zuordnen kann.
    1.)Für was steht #define IDLE 0 und #define MOVE_FORWARDS 1 z.B im beispiel Move 04? Und was genau wird damit ausgeführt?
    man sieht ja befehle wie !IDLE oder es steht mal in den klammern von behaviour_command_t cruise mal IDLE oder auch mal MOVE_FORWARTS das verstehe ich nicht so genau warum und was
    es bedeutet
    2.)Und wie wird behaviour_command_t cruise einfach nur behaviour cruise?
    3.)void moveCommand(behaviour_command_t * cmd) was wir hier abgerufen und für was steht cmd?
    Danke im vorraus

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Zu 1:
    Die #define Direktive ist im Prinzip nur eine Textersatz-Funktion.
    Bei #define IDLE 0 wird also überall im Programm, wo IDLE vorkommt, eine 0 eingesetzt.
    Das Ganze hilft dabei, das Programm verständlicher zu machen.

    Zu 2:
    behaviour_command_t ist ein "höherer Datentyp", der im Programm mit typedef struct definiert wurde. Durch solch einen Datentyp werden einzelne Daten zusammengefaßt, um sie gemeinsam als quasi EINE Variable nutzen zu können.
    "behaviour_command_t" ist damit der NAME dieses neuen Datentyps. Er erfüllt denau dieselbe Funktion wie uint8_t oder double.
    Damit ist noch keine Variable eingerichtet: Das wird mit "behaviour_command_t cruise" gemacht. Danach gibt es die "höhere Variable" cruise. Sie besteht aus uint8_t speed_left, uint8_t speed_right, usw.

    Zu 3:
    Hier wird die Funktion moveCommand mit dem Parameter cmd aufgerufen, wobei cmd vom Typ behaviour_command_t ist.
    Gruß
    Dirk

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    25.07.2012
    Beiträge
    47
    ok danke schonmal,
    da habe ich habe nochmal ne frage zu cmd:
    void moveCommand(behaviour_command_t * cmd)
    {
    if(cmd->move_value > 0) // any move/rotate commands?
    {
    if(cmd->rotate)
    rotate(cmd->speed_left, cmd->dir, cmd->move_value, false);
    else if(cmd->move)
    move(cmd->speed_left, cmd->dir, DIST_MM(cmd->move_value), false);
    cmd->move_value = 0; // clear move value - the move commands are only
    // given once and then runs in background.
    }
    else if(!(cmd->move || cmd->rotate)) // just move at speed?
    {
    changeDirection(cmd->dir);
    moveAtSpeed(cmd->speed_left,cmd->speed_right);
    }
    else if(isMovementComplete()) // movement complete? --> clear flags!
    {
    cmd->rotate = false;
    cmd->move = false;
    }
    }
    also werden bei deisem Programmabschnitt die werte aus behaviour_command_t abgerufen?
    Was genau passiert dann in diesem abschnitt?
    am anfang verstehe ich es schonmal so, das wenn bei behaviour_command_t cruise an der letzten stelle IDLE steht ist move_value 0 und wenn da MOVE_FORWART steht ist move_value 1 oder?
    aber was dann im genauen passiert versthe ich nicht so genau. Kannst du mir das noch so grob erklären?
    Danke
    Geändert von Stephan90 (10.07.2013 um 20:55 Uhr)

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Vielleicht ist das einfacher zu verstehen wen die Code etwas mehr Strukturiert wiedergegeben wird. Ich habe Tab-zeichen zugefügt so das alle Zeilen im gleichen {}-Hierarchie-niveau die selbe Einsprung-abständen haben.

    Tip: Setze deine Code zwisschen [ code ] Schreib hier deine Code [ / code] Tags in dein Bericht. (Nur die Leer-zeichen entfernen zwischen die [ ] Klammern !) Dann wird es isoliert von dein normale Text in ein Spezielles Fenster. Und werden auch Zeilen-einsprung behalten.

    Code:
    void moveCommand(behaviour_command_t * cmd)
     {
        if(cmd->move_value > 0) // any move/rotate commands?
        {
            if(cmd->rotate) rotate(cmd->speed_left, cmd->dir, cmd->move_value, false); 
            else if(cmd->move) move(cmd->speed_left, cmd->dir, DIST_MM(cmd->move_value), false);
            
    // von Valen: Das nächste gehört nicht mehr zu den "if else if" Gesetzen. Weil das hier oben mit ein Punkt-komma abgeschlossen ist. Und kein tieferes {} Niveau verwendet wird.
    
            cmd->move_value = 0; // clear move value - the move commands are only
            // given once and then runs in background.
        }
        else if(!(cmd->move || cmd->rotate)) // just move at speed? 
        {
            changeDirection(cmd->dir);
            moveAtSpeed(cmd->speed_left,cmd->speed_right);
        }
        else if(isMovementComplete()) // movement complete? --> clear flags!
        {
            cmd->rotate = false;
            cmd->move = false;
        }
     }

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    25.07.2012
    Beiträge
    47
    Ok, also werden mit cmd die werte geändert?
    dann nochmal eine Frage zu IDLE in der funktion void behaviour_escape(void) steht ganz als erstes case IDLE dazu steht in der erklärung das kein object erkannt wurde, also müsste er ja gerade aus fahren, aber wo ist IDLE zugeornet das er geradeausfahren soll wenn hier nur 0 gesetzt ist?
    Und für was steht escape.move_value und was bedeuten diese werte und warum sind es verschiedene? und wofür genau ist hier der counter?
    Danke

Ähnliche Themen

  1. frage zu programm
    Von proevofreak im Forum Robby RP6
    Antworten: 8
    Letzter Beitrag: 17.10.2008, 18:09
  2. frage zu eigenem programm
    Von proevofreak im Forum Robby RP6
    Antworten: 2
    Letzter Beitrag: 16.03.2008, 08:56
  3. frage zu programm
    Von proevofreak im Forum Robby RP6
    Antworten: 3
    Letzter Beitrag: 06.03.2008, 18:58
  4. Frage zum Programm
    Von proevofreak im Forum Robby RP6
    Antworten: 5
    Letzter Beitrag: 25.02.2008, 18:10
  5. Frage zu Demo-Programm
    Von Testman3000 im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 4
    Letzter Beitrag: 28.07.2007, 17:16

Berechtigungen

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

12V Akku bauen