- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 5 von 5

Thema: Programm frage

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

  2. #2
    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 21:55 Uhr)

  3. #3
    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;
        }
     }

  4. #4
    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, 19:09
  2. frage zu eigenem programm
    Von proevofreak im Forum Robby RP6
    Antworten: 2
    Letzter Beitrag: 16.03.2008, 09:56
  3. frage zu programm
    Von proevofreak im Forum Robby RP6
    Antworten: 3
    Letzter Beitrag: 06.03.2008, 19:58
  4. Frage zum Programm
    Von proevofreak im Forum Robby RP6
    Antworten: 5
    Letzter Beitrag: 25.02.2008, 19: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, 18:16

Berechtigungen

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

LiFePO4 Speicher Test