-
        

Ergebnis 1 bis 9 von 9

Thema: Servo Steuerung

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.10.2013
    Ort
    Bitburg
    Beiträge
    119

    Servo Steuerung

    Anzeige

    Hallo,

    ich habe vor einen Roboterarm zu bauen,welcher mit Servos betrieben wird. Ich habe als Vorbild die Sweep Datei genommen,aber da bin ich auf folgendes Problem gestoßen: Immer wenn sich der Servo 180° gedreht hat,macht er es erneut. Ich möchte aber,dass er sich nur einmal 180° dreht und dann stoppt. wie verändere ich das? Ich hab das Programm folgendermaßen bearbeitet:
    Code:
    #include*<Servo.h> * Servo myservo; **************** * int pos = 0; * void setup() {* **myservo.attach(9); }* * * void loop() {* **for(pos = 0; pos < 180; pos += 1) **{**********************************// in steps of 1 degree ****myservo.write(pos); ****delay(15); ********************* **}* }*
    Ich hab gedacht,dass es so geht,aber geht nicht.

    Danke für die Hilfe!

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.190
    Du darfst die for-Schleife nur solange durchlaufen bis pos==180.
    In deinem Programm beginnst du durch das void loop() wieder von neuem mit pos=0
    Also vor dem for(.....) noch ein if(pos<180){
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.10.2013
    Ort
    Bitburg
    Beiträge
    119
    Das wiederholt sich immer noch,ich glaub ich setzte die Klammern falsch.
    Code:
    #include <Servo.h> 
     
    Servo myservo;  // create servo object to control a servo 
                    // a maximum of eight servo objects can be created 
     
    int pos = 0;    // variable to store the servo position 
     
    void setup() 
    { 
      myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
    } 
     
     
    void loop() 
    { 
        if(pos<180){for(pos = 0; pos < 180; pos += 1)   // goes from 0 degrees to 180 degrees 
      {                                  // in steps of 1 degree 
        myservo.write(pos);              // tell servo to go to position in variable 'pos' 
        delay(15);                       // waits 15ms for the servo to reach the position 
      }} 
      for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
      {                                
        myservo.write(pos);              // tell servo to go to position in variable 'pos' 
        delay(15);                       // waits 15ms for the servo to reach the position 
      } 
    }
    Kann ich nicht einfach eine Abbruchbedingung einfügen (http://www.arduino-tutorial.de/2010/06/schleifen/)?

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.190
    So wie du es schreibst willst du das Servo langsam hin und herdrehen lassen.
    Code:
    for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees  in steps of 1 degree  
    {
    myservo.write(pos);              // tell servo to go to position in variable 'pos'      
    delay(15);                       // waits 15ms for the servo to reach the position   
    }
    for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees    
    { myservo.write(pos);              // tell servo to go to position in variable 'pos'     
     delay(15);                       // waits 15ms for the servo to reach the position 
    
    }
    Das if dann weglassen.
    Geändert von Hubert.G (08.11.2013 um 09:14 Uhr)
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.10.2013
    Ort
    Bitburg
    Beiträge
    119
    Das versteh ich nicht du hast den gleichen Code gepostet wie in dem Beispiel aber schreibst dann ich soll das if weglassen. Was meinst du damit?

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.595
    Zitat Zitat von Andri Beitrag anzeigen
    ... hast den gleichen Code gepostet ... ich soll das if weglassen. Was meinst du damit?
    Der Code ist gleich - aber nur das Teilstück, das da steht.

    Code:
    if(pos<180){for(pos = 0; pos < 180; pos += 1)   // goes from 0 degrees to 180 degrees 
      {                                  // in steps of 1 degree 
        myservo.write(pos);              // tell servo to go to position in variable 'pos' 
        delay(15);                       // waits 15ms for the servo to reach the position 
      }} 
      for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
      {                                
        myservo.write(pos);              // tell servo to go to position in variable 'pos' 
        delay(15);                       // waits 15ms for the servo to reach the position 
       }
    Ohne if - also ohne die rot markierten Teile *ggg*.
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.10.2013
    Ort
    Bitburg
    Beiträge
    119
    Also wenn du das meinst:
    Code:
    #include <Servo.h> 
     
    Servo myservo;  // create servo object to control a servo 
                    // a maximum of eight servo objects can be created 
     
    int pos = 0;    // variable to store the servo position 
     
    void setup() 
    { 
      myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
    } 
     
     void loop() 
    { 
      for(pos = 0; pos < 180; pos += 1) 
      {                                  // in steps of 1 degree 
        myservo.write(pos);              // tell servo to go to position in variable 'pos' 
        delay(15);                       // waits 15ms for the servo to reach the position 
      } 
     
    }
    Ich hab das schonmal ausprobiert,das funktioniert nicht. Warum funktioniert das nicht wenn ich statt loop setup eingebe? Ich hab das hier gelesen: http://www.arduino-tutorial.de/2010/...grammstruktur/

  8. #8
    Benutzer Stammmitglied Avatar von PlasmaTubeI²C
    Registriert seit
    19.03.2013
    Ort
    Nürnberg
    Alter
    21
    Beiträge
    78
    Hi,

    setup() und loop() müssen immer dastehen, weglassen kann man keines von beiden. Wenn du nur ne einmalige 180° Bewegung willst, pack mal die gesamte for-schleife ins setup().
    Die loop() einfach leer lassen.
    Ist zwar programmiertechnisch nicht gerade sauber gelöst, erfüllt aber seinen Zweck.
    Gruß, Stefan. Rechtschreibfehler gefunden? Kannste behalten!

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.10.2013
    Ort
    Bitburg
    Beiträge
    119
    Vielen Dank! So soll's laufen!

Ähnliche Themen

  1. Servo Steuerung
    Von Projekt 2252 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 23.07.2011, 19:04
  2. servo steuerung
    Von JensK im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 03.03.2009, 20:52
  3. Servo PWM Steuerung
    Von markeis im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 12.11.2008, 21:14
  4. Servo Steuerung...
    Von Flario im Forum Robby RP6
    Antworten: 8
    Letzter Beitrag: 28.09.2008, 16:21
  5. Servo-Steuerung
    Von Spongebob85 im Forum C - Programmierung (GCC u.a.)
    Antworten: 12
    Letzter Beitrag: 12.10.2007, 23:32

Berechtigungen

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