Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo Steuerung
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:
#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!
Hubert.G
07.11.2013, 17:59
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.
#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/)?
Hubert.G
08.11.2013, 09:08
So wie du es schreibst willst du das Servo langsam hin und herdrehen lassen.
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.
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?
oberallgeier
08.11.2013, 14:34
... 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.
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*.
Also wenn du das meinst:
#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/06/programmstruktur/
PlasmaTubeI²C
08.11.2013, 15:57
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.
Vielen Dank! So soll's laufen!
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.