Go Down

Topic: [no need to read]Problems with servo's and hardware Serial (Read 729 times) previous topic - next topic


Jun 19, 2013, 06:49 pm Last Edit: Jun 20, 2013, 03:43 am by Filip_J Reason: 1
Hi All

i'm quite new to this forum, so i hope this is the proper place to put this up:)

as the title suggests: I'm having problems with my serial connection when i include the servo library.

I'm currently working on a C# library for communicating with the Arduino ( also made a library for arduino). just a simple protocol for data transfer between them.

so here' s the deal: i've set it up  so that i have packet that looks like this

"ID" 1 byte -> for deciding what kind of packet i'm recieving/sending;
"Package Size" 1 byte -> for determing when i have received the entire package

its working like a charm until i include the servo library.

the arduino sends my package like this (O represents an OK byte while X represents a random zero)

OXOXOXOXOXOX for a 6 byte package.

while the incoming bytes are just fine.

any help will be appreciated


We have to know more.

Which Arduino board are you using ?
Do you connect a servo motor to the board ? how ?
Could you upload you sketch between code tags ? (use the '#'-button above the text input field).
Does your library/sketch declare an array of hundreds of bytes ?
Does your library/sketch use a hardware timer ?


Servo test code that uses the hardware serial port.

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() {
  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-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.print("writing Angle: ");

    readString=""; //empty for next input

Google forum search: Use Google Search box in upper right side of this page.
Why I like my 2005 Rio Yellow Honda S2000  https://www.youtube.com/watch?v=pWjMvrkUqX0


Hi again thanks for the response seems i was just being silly and somehow had a line in my c# code like this

                    int size = Port.BytesToRead;
                    while (size> 0)
it shoulhave been an if statement this way i would randomly read things normaly ( if 1 byte was recieved ) or very weirdly (if more bytes were recieved)

sorry again guys


Go Up

Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

via Egeo 16
Torino, 10131