-
Notifications
You must be signed in to change notification settings - Fork 0
/
Servo.h
156 lines (89 loc) · 3.06 KB
/
Servo.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#pragma once
/* ================================================================================================================================= */
class Servo {
private:
uint16_t currentPosition; // Current position in Degree
uint16_t minimumPosition; // Minimum position in Degree
uint16_t maximumPosition; // Maximum position in Degree
public:
Servo();
Servo(uint16_t min, uint16_t max);
Servo(uint16_t min, uint16_t max, uint16_t cur);
void SetMinMax(uint16_t min, uint16_t max);
void SetServo(uint16_t val);
uint16_t GetServo();
uint16_t GetMin();
uint16_t GetMax();
uint16_t CheckValid(uint16_t val);
};
/* ================================================================================================================================= */
/**
* @brief Servo constructor.
* @return null
*/
Servo::Servo() {}
/**
* @brief Servo constructor, set minimum and maximum limit.
* @param min Minimum limit.
* @param max Maximum limit.
* @return null
*/
Servo::Servo(uint16_t min, uint16_t max) {
minimumPosition = min;
maximumPosition = max;
}
/**
* @brief Servo constructor, set minimum and maximum limit.
* @param min Minimum limit.
* @param max Maximum limit.
* @param cur Current position.
* @return null
*/
Servo::Servo(uint16_t min, uint16_t max, uint16_t cur) {
minimumPosition = min;
maximumPosition = max;
currentPosition = CheckValid(cur);
}
/* ================================================================================================================================= */
/**
* @brief Set Minimum and Maximum limits.
* @param min Minimum limit (degree).
* @param max Maximum limit (degree).
*/
void Servo::SetMinMax(uint16_t min, uint16_t max) {
minimumPosition = min;
maximumPosition = max;
}
/**
* @brief Set Servo position.
* @param val New position value.
* @return null
*/
void Servo::SetServo(uint16_t val) {
currentPosition = CheckValid(val);
}
/* ================================================================================================================================= */
/**
* @brief Get Servo position.
* @return Current position.
*/
uint16_t Servo::GetServo() {
return currentPosition;
}
uint16_t Servo::GetMin() {
return minimumPosition;
}
uint16_t Servo::GetMax() {
return maximumPosition;
}
/* ================================================================================================================================= */
/**
* @brief Check if the value is valid, if not it will sostitute with limit.
* @param val Position value.
* @return null
*/
uint16_t Servo::CheckValid(uint16_t val) {
if(val < minimumPosition) val = minimumPosition;
if(val > maximumPosition) val = maximumPosition;
return val;
}