|
|
|
@ -24,7 +24,7 @@
|
|
|
|
|
|
|
|
|
|
Note that analogWrite of PWM on pins associated with the timer are disabled when the first servo is attached.
|
|
|
|
|
Timers are seized as needed in groups of 12 servos - 24 servos use two timers, 48 servos will use four.
|
|
|
|
|
The sequence used to sieze timers is defined in timers.h
|
|
|
|
|
The sequence used to seize timers is defined in timers.h
|
|
|
|
|
|
|
|
|
|
The methods are:
|
|
|
|
|
|
|
|
|
@ -50,7 +50,7 @@
|
|
|
|
|
/*
|
|
|
|
|
* Defines for 16 bit timers used with Servo library
|
|
|
|
|
*
|
|
|
|
|
* If _useTimerX is defined then TimerX is a 16 bit timer on the curent board
|
|
|
|
|
* If _useTimerX is defined then TimerX is a 16 bit timer on the current board
|
|
|
|
|
* timer16_Sequence_t enumerates the sequence that the timers should be allocated
|
|
|
|
|
* _Nbr_16timers indicates how many 16 bit timers are available.
|
|
|
|
|
*
|
|
|
|
@ -94,7 +94,7 @@ typedef enum { _Nbr_16timers } timer16_Sequence_t ;
|
|
|
|
|
#define MIN_PULSE_WIDTH 544 // the shortest pulse sent to a servo
|
|
|
|
|
#define MAX_PULSE_WIDTH 2400 // the longest pulse sent to a servo
|
|
|
|
|
#define DEFAULT_PULSE_WIDTH 1500 // default pulse width when servo is attached
|
|
|
|
|
#define REFRESH_INTERVAL 20000 // minumim time to refresh servos in microseconds
|
|
|
|
|
#define REFRESH_INTERVAL 20000 // minimum time to refresh servos in microseconds
|
|
|
|
|
|
|
|
|
|
#define SERVOS_PER_TIMER 12 // the maximum number of servos controlled by one timer
|
|
|
|
|
#define MAX_SERVOS (_Nbr_16timers * SERVOS_PER_TIMER)
|
|
|
|
@ -118,13 +118,13 @@ public:
|
|
|
|
|
uint8_t attach(int pin); // attach the given pin to the next free channel, sets pinMode, returns channel number or 0 if failure
|
|
|
|
|
uint8_t attach(int pin, int min, int max); // as above but also sets min and max values for writes.
|
|
|
|
|
void detach();
|
|
|
|
|
void write(int value); // if value is < 200 its treated as an angle, otherwise as pulse width in microseconds
|
|
|
|
|
void write(int value); // if value is < 200 it is treated as an angle, otherwise as pulse width in microseconds
|
|
|
|
|
void writeMicroseconds(int value); // Write pulse width in microseconds
|
|
|
|
|
int read(); // returns current pulse width as an angle between 0 and 180 degrees
|
|
|
|
|
int readMicroseconds(); // returns current pulse width in microseconds for this servo (was read_us() in first release)
|
|
|
|
|
bool attached(); // return true if this servo is attached, otherwise false
|
|
|
|
|
#if defined (ENABLE_AUTO_BED_LEVELING) && (PROBE_SERVO_DEACTIVATION_DELAY > 0)
|
|
|
|
|
int pin; // store the hw pin of the servo
|
|
|
|
|
int pin; // store the hardware pin of the servo
|
|
|
|
|
#endif
|
|
|
|
|
private:
|
|
|
|
|
uint8_t servoIndex; // index into the channel data for this servo
|
|
|
|
|