- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 12

Thema: Servo-Dauerlauf ohne delay();

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.07.2013
    Beiträge
    7

    Servo-Dauerlauf ohne delay();

    hey,
    ich bin dabei mir einen avoidance robot zu bauen und habe im Moment ein Problem mit einem Code

    Der Servo soll dauerhaft von rechts nach links laufen.
    Ich hatte Ihn schon am laufen, wobei ich alles in die for-Servo-Schleife gepackt habe, dabei war der Servo allerdings extrem am ruckeln.

    aktueller Versuch ohne delay(); :

    Code:
    #include <Servo.h> 
    long previousMillis = 0; 
    Servo myservo; 
                    
    long interval = 5; 
    int pos = 0; 
     
    void setup() 
    { 
      myservo.attach(10, 1000, 2150);
    } 
     
     
    void loop() 
    { 
        unsigned long currentMillis = millis();
          if(currentMillis - previousMillis > interval){
          for(pos = 0; pos < 180;){
            myservo.write(pos);
            pos += 1;
            previousMillis = currentMillis;
            }
          }
           else{
           myservo.write(pos);
           pos -= 1;
           previousMillis = currentMillis;
           }
    }
    Der Servo läuft von rechs nach links und dreht wider um, dann macht er allerdings eine pause von ca. 2s und fängt wieder von vorne an.

    Wieso bitte bleibt er stehen?

  2. #2
    Benutzer Stammmitglied Avatar von porter91
    Registriert seit
    15.07.2012
    Beiträge
    54
    Hey

    eine Frage was macht die Funktion millis() ??
    Und warum machst du für das zurück nicht auch eine for schleife??
    Gruß Jan
    Bin gerene bereit Hilfe zu leisten, freue mich wenn auch mir geholfen werden kann.
    Entschuldigt bitte Rechtschreibfehler falls welche vorkommen

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.07.2013
    Beiträge
    7
    Hey Jan,
    die Funktion millis() gibt an wie lang das System am laufen ist, mit currentmillis = millis() kann ich den Wert immer abfragen.

    Meinst du das ungefähr so mit der for schleife?:

    Code:
    void loop() 
    { 
        unsigned long currentMillis = millis();
          if(currentMillis - previousMillis > interval){
          for(pos = 0; pos < 180;){
            myservo.write(pos);
            pos += 1;
            previousMillis = currentMillis;
            }
          
          for(pos = 180; pos >= 0;){
            myservo.write(pos);
            pos -= 1;
            previousMillis = currentMillis;
            }
          }
    }
    Bei dem Versuch läuft er dauerhaft ohne Pause nach rechts und links, allerdings schätze ich immer nur um eine pos

  4. #4
    Benutzer Stammmitglied Avatar von porter91
    Registriert seit
    15.07.2012
    Beiträge
    54
    Hey
    wie meinst du das nur mit einer Position, nur um ein Grad ?
    Probier mal das:
    void loop()
    {
    unsigned long currentMillis = millis();
    bool rueck = false;
    if(currentMillis - previousMillis > interval)
    {
    if (rueck == false)
    {
    pos++;
    }
    else
    {
    pos--;
    }
    if(pos == 180)
    {
    rueck = true;
    }
    if(pos == 0)
    {
    rueck = false;
    }
    myservo.write(pos);
    }
    }
    Bin gerene bereit Hilfe zu leisten, freue mich wenn auch mir geholfen werden kann.
    Entschuldigt bitte Rechtschreibfehler falls welche vorkommen

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    29.07.2013
    Beiträge
    7
    wie meinst du das nur mit einer Position, nur um ein Grad ?
    genau,

    mit deinem code hab ich leider das selbe Problem wie am Anfang.
    Er macht einen Lauf, d.h. einmal nach links dann wider nach rechts und dort wartet er dann ca 2s und startet wieder erneut.
    Trotzdem Danke.

  6. #6
    Benutzer Stammmitglied Avatar von porter91
    Registriert seit
    15.07.2012
    Beiträge
    54
    Hey

    Mach mal aus:
    long previousMillis = 0;
    auch mal ein unsigned
    Bin gerene bereit Hilfe zu leisten, freue mich wenn auch mir geholfen werden kann.
    Entschuldigt bitte Rechtschreibfehler falls welche vorkommen

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 10.07.2008, 00:02
  2. Zeiten ohne Delay
    Von Spongebob85 im Forum C - Programmierung (GCC u.a.)
    Antworten: 21
    Letzter Beitrag: 22.10.2007, 01:22
  3. [Frage?] die Delay TIme nicht stimmt mit <util/delay.h>
    Von PaMan im Forum C - Programmierung (GCC u.a.)
    Antworten: 9
    Letzter Beitrag: 03.08.2007, 16:57
  4. Servo dreht ohne Controller ???
    Von michiE im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 20.06.2005, 15:13
  5. Servo dreht ohne Impuls
    Von Raimond1 im Forum Motoren
    Antworten: 23
    Letzter Beitrag: 06.05.2005, 16:15

Berechtigungen

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

Labornetzteil AliExpress