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){
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:
Ich hab gedacht,dass es so geht,aber geht nicht.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); ********************* **}* }*
Danke für die Hilfe!
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){
Das wiederholt sich immer noch,ich glaub ich setzte die Klammern falsch.
Kann ich nicht einfach eine Abbruchbedingung einfügen (http://www.arduino-tutorial.de/2010/06/schleifen/)?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 } }
So wie du es schreibst willst du das Servo langsam hin und herdrehen lassen.Das if dann weglassen.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 }
Geändert von Hubert.G (08.11.2013 um 09:14 Uhr)
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?
Der Code ist gleich - aber nur das Teilstück, das da steht.
Ohne if - also ohne die rot markierten Teile *ggg*.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 }
Ciao sagt der JoeamBerg
Also wenn du das meinst:
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/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 } }
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!
Vielen Dank! So soll's laufen!
Lesezeichen