Servo Library
v0.91
Servo motor control library for educational and hobby applications
|
Control up to 14 servos in another core. For up to 28, add the servoAux library to your project. Control the first 14 with servo_set, servo_speed, servo_angle, and other servo_ function calls. Control servos 15 and up with the same function calls, but starting with servoAux_ instead of servo_. More...
#include "simpletools.h"
Go to the source code of this file.
Functions | |
int | servo_angle (int pin, int degreeTenths) |
Set Parallax Standard Servo to angle from 0 to 180 in tenths of a degree. | |
int | servo_speed (int pin, int speed) |
Set Parallax Continuous Rotation servo speed. | |
int | servo_setramp (int pin, int stepSize) |
Set the maximum change in control signal a servo will change in a given 20 ms time period. | |
int | servo_set (int pin, int time) |
Sets servo control signal to servo connected to a given pin for microsecond pulse durations. | |
int | servo_get (int pin) |
Reports the number of microseconds of the pulse most recently sent to a given servo. | |
int | servo_disable (int pin) |
Temporarily or permanently disable a servo by stopping its control signals, setting its I/O pin to input, and removing its settings from the servo library code's control list. To re-enable a servo's position/speed control, simply call servo_angle, servo_speed, or servo_set. Make sure to use the I/O pin of the servo you want to "wake back up". If the servo had ramp settings, they will have to be restored too. | |
void | servo_stop (void) |
Stops the servo process and frees a cog. |
Control up to 14 servos in another core. For up to 28, add the servoAux library to your project. Control the first 14 with servo_set, servo_speed, servo_angle, and other servo_ function calls. Control servos 15 and up with the same function calls, but starting with servoAux_ instead of servo_.
This library automatically delivers control pulses to up to 14 servos every 20 ms. All your code has to do is use servo_angle, servo_speed, or servo_set, to pick the pin the servo is connected to and set its angle (standard servo) or speed (continuous rotation servo).
int servo_angle | ( | int | pin, |
int | degreeTenths | ||
) |
Set Parallax Standard Servo to angle from 0 to 180 in tenths of a degree.
Examples:
0 to 1800 corresponds to control pulses ranging from 500 to 2300 with 1400 at center (90 degrees), which is slightly different from the 1500 center convention, but it places the Parallax Standard Servo's range of motion neatly between its mechanical limits.
pin | Number of the I/O pin connected to servo |
degreeTenths | Tenths of a degree from 0 to 1800 |
int servo_disable | ( | int | pin | ) |
Temporarily or permanently disable a servo by stopping its control signals, setting its I/O pin to input, and removing its settings from the servo library code's control list. To re-enable a servo's position/speed control, simply call servo_angle, servo_speed, or servo_set. Make sure to use the I/O pin of the servo you want to "wake back up". If the servo had ramp settings, they will have to be restored too.
This function can be useful for an application that has to make the servo "relax", but either stopping its position or speed control. It also opens up another entry in the servo control list for applications that use more than 14 servos, but only use 14 or fewer at any given time. For applications that need to use more than 14 servos, add the servoAux library.
pin | Number of the I/O pin the servo is connected to. |
int servo_get | ( | int | pin | ) |
Reports the number of microseconds of the pulse most recently sent to a given servo.
pin | Number of the I/O pin the servo is connected to |
int servo_set | ( | int | pin, |
int | time | ||
) |
Sets servo control signal to servo connected to a given pin for microsecond pulse durations.
This function directly controls the number of microseconds servo control pulses last.
Examples for Parallax Standard Servo:
500, 1400, and 2300 are the number of microseconds (us) the control pulses stay high. More generally, a microsecond above 500 corresponds to 1/10 of a degree counterclockwise of 0 degrees. So, for a given degree position, use:
degree position = 500 + (number of 10ths of a degree)
For setting Parallax Continuous Rotation Servo speed, use:
Values in the 1400 to 1600 range are (roughly) proportional to speed for a Parallax Continuous Rotation Servo, but it's not nearly as precise as position control. Setting full speeds at 1300 and 1700 is a common practice to make sure both servos are going as fast as they possibly can.
pin | Number of the I/O pin that sends signals to the servo. |
time | Microsecond servo pulse time. |
int servo_setramp | ( | int | pin, |
int | stepSize | ||
) |
Set the maximum change in control signal a servo will change in a given 20 ms time period.
This function allows you to make a Parallax Continuous Rotation servo ramp up to and down from whatever speed or position it was previously set to. It also allows you to set the rate at which a Parallax Standard servo turns from its previous position to a new position.
pin | Number of the I/O pin the servo is connected to |
stepSize | The number of microseconds per 20 ms of time that the servo's control signal is allowed to change. This equates to the number of tenths of a degree a Parallax Standard servo is allowed to change, or the number of 100ths of full speed the a Parallax Continuous Rotation servo is allowed to change per 20 ms. |
int servo_speed | ( | int | pin, |
int | speed | ||
) |
Set Parallax Continuous Rotation servo speed.
Examples:
100 to -100 corresponds to the linear speed control range. For example, servo_speed(pin, 75) will set the speed to roughly 75% of full speed counterclockwise. This is a very rough approximation.
pin | Number of the I/O pin connected to servo |
speed | Speed from -100 to 100 |