Arduino: Putting servos in my class causes them to rotate all the way to one side

Posted by user2526712 on Stack Overflow See other posts from Stack Overflow or by user2526712
Published on 2013-06-27T06:00:58Z Indexed on 2013/06/28 4:21 UTC
Read the original article Hit count: 154

Filed under:

I am trying to create a new class that controls two servos. My code compiles just fine. However, when I run it, the servos just turn all the way to one direction. This seems to happen when I try instantiating the class (when in the constructor, I attach the servos in the class to pins).

In My class's header file, I have [UPDATED]

#ifndef ServoController_h
#define ServoController_h

#include "Arduino.h"
#include <Servo.h>

class ServoController
{
    public:
        ServoController(int rotateServoPin, int elevateServoPin);
        void rotate(int degrees);
        void elevate(int degrees);
    private:
        Servo rotateServo;
        Servo elevateServo;
        int elevationAngle;
        int azimuthAngle;
};

#endif

Code so far for my Class:

#include "Arduino.h"
#include "ServoController.h"

ServoController::ServoController(int rotateServoPin, int elevateServoPin)
{
    azimuthAngle = 0;
    elevationAngle = 0;
    elevateServo.attach(elevateServoPin);
    rotateServo.attach(rotateServoPin);
}


void ServoController::rotate(int degrees)
{
    //TO DO
    rotateServo.write(degrees); 
}


void ServoController::elevate(int degrees)
{
    //TO DO
    elevateServo.write(degrees);    
}

And finally my arduino sketch so far is just:

#include <ServoController.h>
#include <Servo.h>

ServoController sc(2 , 3);

void setup()
{

}

void loop()
{
}  

I'm pretty sure the circuit I am using is fine, since if I do not use my class, and just use the servo library directly in my arduino file, the servos move correctly.

any ideas why this might happen?

[UPDATE]

I actually got this working. In my constructor, I have removed the lines to attach the servos to pins. Instead, I have added another method to my class which does the attachment.

ServoController::ServoController(int rotateServoPin, int elevateServoPin)
{
    azimuthAngle = 0;
    elevationAngle = 0;
//  elevateServo.attach(elevateServoPin);
//  rotateServo.attach(rotateServoPin);
}


void ServoController::attachPins(int rotateServoPin, int elevateServoPin)
{
    azimuthAngle = 0;
    elevationAngle = 0;
    elevateServo.attach(elevateServoPin);
    rotateServo.attach(rotateServoPin);

}

I then call this in my sketch's setup() function:

void setup()
{
  sc.attachPins(2,3);

}

It seems like if I attach my servos outside of the setup() function, my problem occurs.

[UPDATE July 27 9:13PM]

Verified something with another test:

I created a new sketch where I attached a servo before setup():

#include <Servo.h>

Servo servo0;
servo0.attach(2);

void setup()
{

}


void loop() // this function runs repeatedly after setup() finishes
{
  servo0.write(90);
  delay(2000);  
  servo0.write(135);
  delay(2000);
  servo0.write(45);
  delay(2000);
}

When I try to compile, Arduino throws an error:

"testservotest:4: error: expected constructor, destructor, or type conversion before '.' token"

So there was an error, but it was not thrown when the attach method was called from a class

Thanks very much

© Stack Overflow or respective owner

Related posts about arduino