MakeBlock Drive Updated
Updated library for MakeBlock Ranger
Loading...
Searching...
No Matches
Servo.h
1
/*
2
Servo.h - Interrupt driven Servo library for Arduino using 16 bit timers- Version 2
3
Copyright (c) 2009 Michael Margolis. All right reserved.
4
5
This library is free software; you can redistribute it and/or
6
modify it under the terms of the GNU Lesser General Public
7
License as published by the Free Software Foundation; either
8
version 2.1 of the License, or (at your option) any later version.
9
10
This library is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
Lesser General Public License for more details.
14
15
You should have received a copy of the GNU Lesser General Public
16
License along with this library; if not, write to the Free Software
17
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
*/
19
20
/*
21
A servo is activated by creating an instance of the Servo class passing
22
the desired pin to the attach() method.
23
The servos are pulsed in the background using the value most recently
24
written using the write() method.
25
26
Note that analogWrite of PWM on pins associated with the timer are
27
disabled when the first servo is attached.
28
Timers are seized as needed in groups of 12 servos - 24 servos use two
29
timers, 48 servos will use four.
30
The sequence used to sieze timers is defined in timers.h
31
32
The methods are:
33
34
Servo - Class for manipulating servo motors connected to Arduino pins.
35
36
attach(pin ) - Attaches a servo motor to an i/o pin.
37
attach(pin, min, max ) - Attaches to a pin setting min and max values in microseconds
38
default min is 544, max is 2400
39
40
write() - Sets the servo angle in degrees. (invalid angle that is valid as pulse in microseconds is treated as microseconds)
41
writeMicroseconds() - Sets the servo pulse width in microseconds
42
read() - Gets the last written servo pulse width as an angle between 0 and 180.
43
readMicroseconds() - Gets the last written servo pulse width in microseconds. (was read_us() in first release)
44
attached() - Returns true if there is a servo attached.
45
detach() - Stops an attached servos from pulsing its i/o pin.
46
*/
47
48
#ifndef Servo_h
49
#define Servo_h
50
51
#include <inttypes.h>
52
53
/*
54
* Defines for 16 bit timers used with Servo library
55
*
56
* If _useTimerX is defined then TimerX is a 16 bit timer on the current board
57
* timer16_Sequence_t enumerates the sequence that the timers should be allocated
58
* _Nbr_16timers indicates how many 16 bit timers are available.
59
*/
60
61
// Architecture specific include
62
#if defined(ARDUINO_ARCH_AVR)
63
#include "avr/ServoTimers.h"
64
#elif defined(ARDUINO_ARCH_SAM)
65
#include "sam/ServoTimers.h"
66
#elif defined(ARDUINO_ARCH_SAMD)
67
#include "samd/ServoTimers.h"
68
#else
69
#error "This library only supports boards with an AVR, SAM or SAMD processor."
70
#endif
71
72
#define Servo_VERSION 2
// software version of this library
73
74
#define MIN_PULSE_WIDTH 544
// the shortest pulse sent to a servo
75
#define MAX_PULSE_WIDTH 2350
// the longest pulse sent to a servo
76
#define DEFAULT_PULSE_WIDTH 1500
// default pulse width when servo is attached
77
#define REFRESH_INTERVAL 20000
// minumim time to refresh servos in microseconds
78
79
#define SERVOS_PER_TIMER 12
// the maximum number of servos controlled by one timer
80
#define MAX_SERVOS (_Nbr_16timers * SERVOS_PER_TIMER)
81
82
#define INVALID_SERVO 255
// flag indicating an invalid servo index
83
84
typedef
struct
{
85
uint8_t nbr :7 ;
// a pin number from 0 to 127
86
uint8_t isActive :1 ;
// true if this channel is enabled, pin not pulsed if false
87
}
ServoPin_t
;
88
89
typedef
struct
{
90
ServoPin_t
Pin;
91
volatile
unsigned
int
ticks;
92
}
servo_t
;
93
94
class
Servo
95
{
96
public
:
97
Servo
();
98
uint8_t attach(
int
pin);
// attach the given pin to the next free channel, sets pinMode, returns channel number or 0 if failure
99
uint8_t attach(
int
pin,
int
min,
int
max);
// as above but also sets min and max values for writes.
100
void
detach();
101
void
write(
int
value);
// if value is < 200 its treated as an angle, otherwise as pulse width in microseconds
102
void
writeMicroseconds(
int
value);
// Write pulse width in microseconds
103
int
read();
// returns current pulse width as an angle between 0 and 180 degrees
104
int
readMicroseconds();
// returns current pulse width in microseconds for this servo (was read_us() in first release)
105
bool
attached();
// return true if this servo is attached, otherwise false
106
private
:
107
uint8_t servoIndex;
// index into the channel data for this servo
108
int8_t min;
// minimum is this value times 4 added to MIN_PULSE_WIDTH
109
int8_t max;
// maximum is this value times 4 added to MAX_PULSE_WIDTH
110
};
111
112
#endif
Servo
Definition
Servo.h:95
ServoPin_t
Definition
Servo.h:84
servo_t
Definition
Servo.h:89
src
utility
Servo.h
Generated by
1.9.8