34
34
35
35
class ServoImpl {
36
36
uint8_t pin;
37
+ uint8_t channel;
37
38
38
39
public:
39
- ServoImpl (const uint8_t _pin, const uint8_t _channel) : pin(_pin) {
40
- // Setup timer
40
+ ServoImpl (const uint8_t _pin, const uint8_t _channel) : pin(_pin), channel(_channel) {
41
+ # if ESP_IDF_VERSION_MAJOR < 5
41
42
ledcSetup (_channel, (1000000 / REFRESH_INTERVAL), LEDC_MAX_BIT_WIDTH);
42
-
43
- // Attach timer to a LED pin
44
43
ledcAttachPin (pin, _channel);
44
+ #else
45
+ ledcAttachChannel (pin, (1000000 / REFRESH_INTERVAL), LEDC_MAX_BIT_WIDTH, channel);
46
+ #endif
45
47
}
46
48
47
49
~ServoImpl () {
50
+ #if ESP_IDF_VERSION_MAJOR < 5
48
51
ledcDetachPin (pin);
52
+ #else
53
+ ledcDetach (pin);
54
+ #endif
49
55
}
50
56
51
- void set (const uint8_t _channel, const uint32_t duration_us) {
52
- ledcWrite (_channel , LEDC_US_TO_TICKS (duration_us));
57
+ void set (const uint32_t duration_us) {
58
+ ledcWrite (ref () , LEDC_US_TO_TICKS (duration_us));
53
59
}
54
60
55
- uint32_t get (const uint8_t _channel) const {
56
- return LEDC_TICKS_TO_US (ledcRead (_channel));
61
+ uint32_t get () const {
62
+ return LEDC_TICKS_TO_US (ledcRead (ref ()));
63
+ }
64
+
65
+ private:
66
+ // read/write channel argument changed to pin between 4.x and 5.x
67
+ uint8_t ref () const {
68
+ #if ESP_IDF_VERSION_MAJOR < 5
69
+ return channel;
70
+ #else
71
+ return pin;
72
+ #endif
57
73
}
58
74
};
59
75
@@ -121,7 +137,7 @@ void Servo::writeMicroseconds(int value)
121
137
else if (value > SERVO_MAX ())
122
138
value = SERVO_MAX ();
123
139
124
- servos[this ->servoIndex ]->set (this -> servoIndex , value);
140
+ servos[this ->servoIndex ]->set (value);
125
141
}
126
142
}
127
143
@@ -135,7 +151,7 @@ int Servo::readMicroseconds()
135
151
if (!servos[this ->servoIndex ]) {
136
152
return 0 ;
137
153
}
138
- return servos[this ->servoIndex ]->get (this -> servoIndex );
154
+ return servos[this ->servoIndex ]->get ();
139
155
}
140
156
141
157
bool Servo::attached ()
0 commit comments