- Labornetzteil AliExpress         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 26 von 26

Thema: sainsmart-car mit omni wheels

  1. #21
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Anzeige

    Powerstation Test
    ich weiss nicht ob das herausnehmen der angabe der fahrtdauer aus der "millis-schleife" das problem löst:
    Code:
    void zwei_sec_links_rotieren(void)
    {
      currentMillis = millis();
      dauer_fahrt = 2000;
    
      if (currentMillis - previousMillis > dauer_fahrt)
      {
    
        Serial.println("zwei sec links rotieren");
        motor_hl->setSpeed(s_speed);
        motor_hr->setSpeed(s_speed + 1);
        motor_vr->setSpeed(s_speed + 1);
        motor_vl->setSpeed(s_speed);
    
        motor_hl->run(BACKWARD);
        motor_hr->run(FORWARD);
        motor_vr->run(FORWARD);
        motor_vl->run(BACKWARD);
    
      }
    }
    der code wird in der loop so aufgerufen:
    Code:
      zwei_sec_links_rotieren();
      delay(500);
      alle_motoren_halt();
    und die räder drehen eine halbe sekunde und nicht zwei. Ich verstehe es nicht, in anderen beispielen funktioniert es so mit den millis...
    gruß inka

  2. #22
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Die halbe Sekunde kommt wohl von "delay(500);"

    Das mit dem Code haut so nicht hin. Der muss anders gestaltet werden. Du willst doch "delay" raus haben.

    Zuerst startest Du die Motoren.
    Dann wartest Du in "loop()", bis 2 Sekunden um sind.
    Dann stoppst Du die Motoren.

    Die Funktion "
    void zwei_sec_links_rotieren(void)" ist von der Namensgabe her schon so nicht brauchbar, weil sie was falsches vermittelt, was Du dann vermutlich innerhalb der Funktion umzusetzen versuchst, weil ja sonst die Logik nicht zum Namen der Funktion passt.

    Also mal anders denken, hier ein Beispiel:

    Was brauchst Du für Funktionen?

    Code:
    void  links_rotieren(void){   
    
        motor_hl->setSpeed(s_speed);
        motor_hr->setSpeed(s_speed + 1);
        motor_vr->setSpeed(s_speed + 1);
        motor_vl->setSpeed(s_speed);
    
    
        motor_hl->run(BACKWARD);
        motor_hr->run(FORWARD);
        motor_vr->run(FORWARD);
        motor_vl->run(BACKWARD);
    }
    
    
    void alle_motoren_halt(void){
        
        ...
    
    
    }


    Welche Variablen außerhalb von "loop()" brauchst Du?

    Code:
    int status = 0;
    unsigned long previousMillis, currentMillis, dauer_fahrt;


    Wie in "loop()" aufrufen?

    Code:
    currentMillis = millis();
    
    
    if (status == 0) {
            status = 1;
            previousMillis = currentMillis;
            dauer_fahrt = 2000;
            links_rotieren();
    }
    
    
    if (status == 1  &&  (currentMillis - previousMillis) > dauer_fahrt) {
            alle_motoren_halt();
    }


    PS: der Code soll nur am Beispiel zeigen, wie es funktionieren kann.

    MfG

  3. #23
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von Moppi Beitrag anzeigen
    Die Funktion "void zwei_sec_links_rotieren(void)" ist von der Namensgabe her schon so nicht brauchbar, weil sie was falsches vermittelt, was Du dann vermutlich innerhalb der Funktion umzusetzen versuchst, weil ja sonst die Logik nicht zum Namen der Funktion passt.
    ich kann selbst nicht mehr nachvollziehen von welchem code und wie oft ich diese schnipsel hin und her kopiert habe, bis sie dann endlich nicht mehr funktioniert haben...

    Zitat Zitat von Moppi Beitrag anzeigen
    Code:
    int status = 0;
    unsigned long previousMillis, currentMillis, dauer_fahrt;

    die unsigned long's hatte ich schon global definiert, hier ist es noch die frage nach dem "status". Sollte die variable immer beim aufruf einer der motorfunktionen neu lokal definiert werden, also z. b. "status-drehen-links" , oder auch global und dann jedesmal aufgerufen werden? Kann man es überhaupt so von vorne herein definieren?

    Zitat Zitat von Moppi Beitrag anzeigen
    der Code soll nur am Beispiel zeigen, wie es funktionieren kann.


    tut er auch, danke, für beides, erklärung und codeschnipsel - dann kann man beides gut nachvollziehen...
    gruß inka

  4. #24
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Zitat Zitat von inka Beitrag anzeigen
    "status". Sollte die variable immer beim aufruf einer der motorfunktionen neu lokal definiert werden, also z. b. "status-drehen-links" , oder auch global und dann jedesmal aufgerufen werden? Kann man es überhaupt so von vorne herein definieren?
    Du kannst die "status-drehen-links" nennen, nur die soll global definiert sein. Was meinst Du mit " jedesmal aufgerufen werden"? Diese Variable dient der Auswertung, damit im Programm ermittelt werden kann, was gerade abläuft und dann kann darauf reagiert werden.


    MfG

  5. #25
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    Zitat Zitat von Moppi Beitrag anzeigen
    Du kannst die "status-drehen-links" nennen, nur die soll global definiert sein. Was meinst Du mit " jedesmal aufgerufen werden"? Diese Variable dient der Auswertung, damit im Programm ermittelt werden kann, was gerade abläuft und dann kann darauf reagiert werden.
    ich meine immer wieder neu lokal definiert werden, nicht aufgerufen werden, sorry

    also global definieren, aber für alle möglichen motoraktionen. z.b. "links drehen" oder "rechts drehen" oder "vorwärts"...
    gruß inka

  6. #26
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Zitat Zitat von inka Beitrag anzeigen
    ich meine immer wieder neu lokal definiert werden, nicht aufgerufen werden, sorry

    also global definieren, aber für alle möglichen motoraktionen. z.b. "links drehen" oder "rechts drehen" oder "vorwärts"...
    ja, richtig.

Seite 3 von 3 ErsteErste 123

Ähnliche Themen

  1. Mecanum-Wheels -Bot will nicht richtig..., aber warum ??
    Von oderlachs im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 10
    Letzter Beitrag: 23.07.2016, 12:37
  2. Antworten: 1
    Letzter Beitrag: 02.11.2015, 16:57
  3. Roboterbasis mit Mecanum Wheels
    Von malthy im Forum Vorstellung+Bilder+Ideen zu geplanten eigenen Projekten/Bots
    Antworten: 37
    Letzter Beitrag: 31.08.2015, 20:09
  4. SainSmart uno r3-atmega328
    Von Droggelbecher im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 18
    Letzter Beitrag: 04.01.2013, 12:57
  5. Pulling Test - Wheels, Tyres and Traction
    Von Vogon im Forum Mechanik
    Antworten: 4
    Letzter Beitrag: 08.02.2006, 19:34

Berechtigungen

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

LiFePO4 Speicher Test