Go Down

Topic: Servo Steuern (Read 1 time) previous topic - next topic

Balubi

Hallo zusammen,

ich habe ein StarterKit von Watterotts. Dabei war unter anderem ein Servo und ein Arduino UNO.

Ich bin jetzt dabei ein bisschen mit den einzelnen Komponenten rumzutesten.
LEDs , Buttons und Potis kann ich jetzt verwendet.
Den Servo eigentlich auch.
Jetzt versuche ich, den Servo, per Tastendruck in eine richtung zu "fahren"....
Ich weiß nicht genau, wie ich es lösen kann...

While(button)

{
servo.write(1);
}

So würde der Servo nur einma durchlaufen...

Wie kann ich den Servo aber solange laufen lassen, bis ich den Taster los lasse..

Gruß

uwefed

Du mußt den Wert erhöhen-vermindern, den Du an den Servo übergibst. Der Wert entspricht dem Drehwinkel des Servos.

also sowas in der Richtung:

Code: [Select]
While(button)
{
if(winkel <180) winkel++;
servo.write(winkel);
}


Grüße Uwe

Balubi

Hallo,

ich bekomme es irgendwie nicht hin ...

Ich hab folgendes:
#include <Servo.h>

Servo myservo;  // create servo object to control a servo
                // a maximum of eight servo objects can be created



const int buttonPin = 3;
const int ledPinrt =  2;
int winkel = 0;
int buttonState = 0;

void setup()
{
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  pinMode(ledPinrt, OUTPUT);
  pinMode(buttonPin, INPUT);

}


void loop()
{
buttonState = digitalRead(buttonPin);


while(buttonstate)

{
if(winkel < 180)

{
winkel++;

servo.write(winkel);
}


}
}

Aber irgendwie rührt sich nichts...

df6ih

Ja was nun ?

buttonstate oder buttonState ? ;) Variablen sind Case Sensitive

Balubi

Hey,

ich habe den oberen Code aus meinem File abkopiert, den unteren Code im Thread geschrieben.. Daher der Unterschied. Ich habe in dem Moment nicht darauf geachtet.
Dennoch tut sich nichts :)

uwefed

Was df6ih sagen wollte ist, daß die Variable "buttonState" eine andere Variable ist als "buttonstate"
Versuch mal einige serial.print() einzufügen und Dir den Zustand der Variablen auf dem Terminal auszugeben. So merkst Du woran es fehlt.
Füge auch ein delay() in die While Schleife ein, da ansonsen die Schleife in 0,1 Sekunden auf 180 gezählt hat.
Grüße Uwe

spaceball

Hallo
Wenn Dein Servo bereits den Wert 180 erreicht hat, tut sich nichts mehr, da Du ja nur die Abfrage für <180 definiert hast.
Gruß Reinhard

Balubi

Okay,

aber ein Servo kann sich schon immer weiter drehen?

Also zum Beispiel wie ein Antrieb eines Autos oder so?

MueThoS

Nur wenn du es umbaust!
Du müßtest das Poti ausbauen und mit Wiederständen überbrücken
google mal nach Servo hack

MaFu


Okay,

aber ein Servo kann sich schon immer weiter drehen?

Also zum Beispiel wie ein Antrieb eines Autos oder so?


Servos sind so konzipiert, dass sie in einem bestimmten Winkelbereich eine angegebene Position (möglichst) genau anfahren können. Der Winkelbereich ist in der Regel auf 180 bzw. 270 Grad beschränkt. Einige wenige Servos können auch 9 bis 10 volle Umdrehungen anfahren (Spezialservos die meist als Seilwinden für Segelschiffe verwendet werden), das wars aber dann.
Wie MueThoS schon geschrieben hat, kannst Du den Servo auf endlosbetrieb umbauen. Damit verlierst Du aber die Positioniermöglichkeit.
_______
Manfred

Go Up