I'm having problem with the library servo.h. I'm setting the library to control 6 servos and always one of the pins doesn't control the servo...
I can't understand what is happening, I've already changed the pins used to control the servos, but it has no effect...
I'm setting the position of all servos to 0º, so I connect a servo with the arm in another position, it should put the servo's arm to the 0º position, and it only doesn't work to the pin 13.
Does anyone have any clue about what is happening?
Have you tested pin13 is working from digitalWrite? (it should have an LED on it
so this is an easy test). Try checking the voltage from it when LOW and HIGH using
a multimeter.
With some libraries pin 13 is used as a timing pin. Below is some servo test code you can try using pin 13 with to see if the servo works.
// zoomkat 12-25-13 serial servo test
// type servo position 0 to 180 in serial monitor
// or for writeMicroseconds, use a value like 1500
// Send an a to attach servo or d to detach servo
// for IDE 1.0.5 and later
// Powering a servo from the arduino usually *DOES NOT WORK*.
#include <Servo.h>
String readString; //String captured from serial port
Servo myservo; // create servo object to control a servo
int n; //value to write to servo
void setup() {
Serial.begin(9600);
myservo.writeMicroseconds(1500); //set initial servo position if desired
myservo.attach(7, 500, 2500); //the pin for the servo control, and range if desired
Serial.println("servo all-in-one test code 12-25-13"); // so I can keep track of what is loaded
Serial.println();
}
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
// attach or detach servo if desired
if (readString == "d") {
myservo.detach(); //detach servo
Serial.println("servo detached");
goto bailout; //jump over writing to servo
}
if (readString == "a") {
myservo.attach(7); //reattach servo to pin 7
Serial.println("servo attached");
goto bailout;
}
n = readString.toInt(); //convert readString into a number
// auto select appropriate value
if(n >= 500)
{
Serial.print("writing Microseconds: ");
Serial.println(n);
myservo.writeMicroseconds(n);
}
else
{
Serial.print("writing Angle: ");
Serial.println(n);
myservo.write(n);
}
bailout: //reenter code loop
Serial.print("Last servo command position: ");
Serial.println(myservo.read());
Serial.println();
readString=""; //empty for next input
}
}
MarkT, I can control without problems the led connected to pin 13...
zoomkat, I didn't try your code because I'm using the Gerduino, and it doesn't have serial connected to the cable as the others arduinos have.
I could get it working using the pin 0 or 1, but I would like they free as the are the pins used to serial communication...
Also if I try pins 9 or 10 it make the servo spin 360º without stop, actually it has just broken one of my servos...
Does anyone know were I can find information about limitations of the servo library, I'm using the one that comes with Arduino's (Servo - Arduino Reference), and as far I understand I'm not doing something wrong...