I am trying to run a VEX servo motor (3-wire) with my Arduino. No matter what I try, I can only get it to run infinitely.
Here are two programs I created to try and get it to work...
Yep, the VEX servo is a continuous rotation servo. That is why they have the 2" diameter wheel with a black o-ring around the outside. As compared to a normal servo - 90 degrees is stop. and you have direction control as you move away from 90 degrees along with "some" speed control.
Here is the code I got to work. The question I was asking was a little more general... it can be worded as "How can I run two lines of code at the same time?"
This is my current code to run one servo, based on a library I found online. I just want to run two servos at once, and thought I might be able to get two lines of code to execute AT THE SAME TIME.
#include <ContinuousRotationServo.h>
ContinuousRotationServo Servo;
int distance;
void setup()
{
Servo.begin(2); // port 2, this library works without PWM
}
void loop()
{
Servo.rotateLeft(50,100);
Servo.noMovement(500);
Servo.rotateRight(50,100);
Servo.noMovement(500);
}
Not to my knowledge, the processor on the Arduino is only capable of handling one instruction at any given moment in time. But that is a extremely small amount of time. Unless there is a delay or sleep between the 2 calls to the servos will start at the same (human percevable) time.
DCengineer:
Here is the code I got to work. The question I was asking was a little more general... it can be worded as "How can I run two lines of code at the same time?"
This is my current code to run one servo, based on a library I found online. I just want to run two servos at once, and thought I might be able to get two lines of code to execute AT THE SAME TIME.
#include <ContinuousRotationServo.h>
ContinuousRotationServo Servo;
int distance;
void setup()
{
Servo.begin(2); // port 2, this library works without PWM
}
Well first a microcontroller chip is a single core processor that is always capable of only executing one machine instruction at a time, so the whole concept of doing things "AT THE SAME TIME" is something you will have to come to terms with. The processor is very fast so many tasks can be done independently of each other such that from a human point of view it will indeed seem that it can do many things at the same time.
So taking your code example and adding a second servo and giving it the same commands, you would not be able to tell that the micro was not doing two things at the same time even though it is.
#include <ContinuousRotationServo.h>
ContinuousRotationServo Servo;
ContinuousRotationServo Servo2;
int distance;
void setup()
{
Servo.begin(2); // port 2, this library works without PWM
Servo2.begin(3);
}
void loop()
{
Servo.rotateLeft(50,100);
Servo2.rotateLeft(50,100);
delay(1000);
Servo.noMovement(500);
Servo2.noMovement(500);
delay(1000);
Servo.rotateRight(50,100);
Servo2.rotateRight(50,100);
delay(1000);
Servo.noMovement(500);
Servo2.noMovement(500);
delay(1000);
}
Figured it out: this program works, and it runs two motors at the same time! The key, make sure a delay is after every instance. This program uses the standard Servo.h library.