Go Down

Topic: Servo defekt oder fehler im Code (Read 1 time) previous topic - next topic

brainbug85

Hallo erstmal,

ich bin im Bereich Arduino noch relativ neu. Aber bisher hab ich alles hinbekommen was ich versucht habe, nun hänge ich aber seit mehreren Tagen an einer Servo Steuerung und weiß nicht mehr weiter bzw. vermute das die Servo defekt ist.
Vllt. kann ja mal jemand über den Code schauen und eventuelle Denkfehler meinerseits aufdecken :)
Der wechsel zwischen open und close im Serial Monitor klappt, nur die Servo macht keinen mucks!

Schonmal vielen Dank !
Gruß
Brainbug

Code: [Select]
/*
  Servo
*/
// Servo Library hinzufügen
#include <Servo.h>

//Erzeugen von Servo
Servo myservo;
// digital pin 3 als Input
int pushButton3 = 3;
int pos = 0;

// These constants angle won't change:
const int open = 180;
const int close = 0;

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  // Initialisierung der Servo Pins
  myservo.attach(9);

 
  // Initialisierung Pin 3 als Input:
  pinMode(pushButton3, INPUT);
  digitalWrite(pushButton3, HIGH); // Pull Up Widerstand aktivieren
 
}

void loop() {
 
   if (digitalRead(pushButton3) == HIGH){
    if (pos == close){
    Serial.println("Button gedrueckt und es wird geöffnet");
    myservo.write(open);
    delay(600);
    pos = open;
    }else{
    Serial.println("Button gedrueckt und es wird geschlossen");
    myservo.write(close);
    delay(600);
    pos = close;
    }
   }
  delay(500);
}

J3RE

Der Code scheint richtig zu sein und wenn im Serial Monitor alles klappt, kann der Fehler eigentlich nur beim Servo liegen.
Wie hast du den Servo denn angeschlossen?


Grüße,
J3RE

jurs


Vllt. kann ja mal jemand über den Code schauen und eventuelle Denkfehler meinerseits aufdecken :)
---
  myservo.attach(9);


Welches Arduino-Board verwendest Du?

Es gibt mindestens eine handvoll unterschiedlicher Boards, und Du kannst nicht voraussetzen, dass die mit einem UNO und der Servo-Library funktionierenden Pins auch mit anderen Boards funktionieren.

uwefed

Hast Du das Beispielprogramm das mit der Bibliothek mitgeliefert wird probiert?
Grüße Uwe

brainbug85

#4
Jan 16, 2013, 11:44 pm Last Edit: Jan 16, 2013, 11:52 pm by brainbug85 Reason: 1
Erstmal vielen Dank an die vielen und schnellen antworten ! :smiley-mr-green:

Quote
Welches Arduino-Board verwendest Du?

Ich verwende eine Duemilanove - Clone - Iteaduino V2.2

Quote
Hast Du das Beispielprogramm das mit der Bibliothek mitgeliefert wird probiert?

Ja hab ich probiert und da funktioniert es. Ich habe nur das gefühl das er nicht von 0° auf 180° fährt sondern ca nur bis 120°. Im Beispiel Sweep wird mit einem for statement gearbeitet, kann ich das vllt. einfach ersetzen nach dem ersten "if" ?

Code: [Select]
Wie hast du den Servo denn angeschlossen?
Der Iteaduino hat 13 "Servo interface break outs" da hab ich schon verschieden probiert 3,9 und 13

J3RE

Das Problem bei deinem Code ist  das „myservo.write()" nur einmal pro Tastendruck ausgeführt wird.
Die for-Schleife aus dem Sweep-Beispiel könntest du verwenden und in dein Programm integrieren. Dann kannst du das „delay(600)" auch wecklassen.

brainbug85


Das Problem bei deinem Code ist  das „myservo.write()" nur einmal pro Tastendruck ausgeführt wird.
Die for-Schleife aus dem Sweep-Beispiel könntest du verwenden und in dein Programm integrieren. Dann kannst du das „delay(600)" auch wecklassen.


Ist das generell ein Problem ? Ich dachte ich muss die Sache nicht unnötig verkomplizieren bzw mit der "for schleife" bekomm ich es irgendwie nicht hin  :)

brainbug85

nach vielen Tagen rum probieren hab ich nun den Fehler gefunden, und zwar liegt es doch an den Servos.
mit dem "Test-Programm" unten hab ich raus gefunden das meine Servos nur im Winkel von 20 bis 164 funktionieren, wieso weiß ich nicht !
Sollte jemand vllt. ähnliche Probleme haben , füge ich unten eine Test sketch an mit dem man per PC jeden einzelnen Winkel bzw micro sec. am Servo testen kann.

Jetzt hab ich aber ein neues Problem, und zwar fahren die servo am Anfang bis eine Taste gedrückt wird wild umher. Kann ich das lösen in dem ich einen write befehl in "setup" schreibe ?
Oder gibt es eine andere Möglichkeit ?


Code: [Select]
// zoomkat 10-22-11 serial servo test
// type servo position 0 to 180 in serial monitor
// or for writeMicroseconds, use a value like 1500
// for IDE 0022 and later
// Powering a servo from the arduino usually *DOES NOT WORK*.

String readString;
#include <Servo.h>
Servo myservo;  // create servo object to control a servo

void setup() {
 Serial.begin(9600);
 myservo.writeMicroseconds(1500); //set initial servo position if desired
 myservo.attach(7);  //the pin for the servo control
 Serial.println("servo-test-22-dual-input"); // so I can keep track of what is loaded
}

void loop() {
 while (Serial.available()) {
   char c = Serial.read();  //gets one byte from serial buffer
   readString += c; //makes the string readString
   delay(2);  //slow looping to allow buffer to fill with next character
 }

 if (readString.length() >0) {
   Serial.println(readString);  //so you can see the captured string
   int n = readString.toInt();  //convert readString into a number

   // auto select appropriate value, copied from someone elses code.
   if(n >= 500)
   {
     Serial.print("writing Microseconds: ");
     Serial.println(n);
     myservo.writeMicroseconds(n);
   }
   else
   {  
     Serial.print("writing Angle: ");
     Serial.println(n);
     myservo.write(n);
   }

   readString=""; //empty for next input
 }
}

uwefed

bevor man etwas auf den Servo ausgibt sollte schon der Pin an dem der Servo hängt definiert sein:

Code: [Select]
void setup() {
  Serial.begin(9600);
  myservo.writeMicroseconds(1500); //set initial servo position if desired
  myservo.attach(7);  //the pin for the servo control
  Serial.println("servo-test-22-dual-input"); // so I can keep track of what is loaded
}


Uwe

Go Up
 

Quick Reply

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Warning: this topic has not been posted in for at least 120 days.
Unless you're sure you want to reply, please consider starting a new topic.

Note: this post will not display until it's been approved by a moderator.
Name:
Email:

shortcuts: alt+s submit/post or alt+p preview