|
1 | 1 | /*******************************************************************
|
2 |
| - ESP32 PWM, SERVO and TONE Library, Version 4.3.2 |
| 2 | + ESP32 PWM, SERVO and TONE Library, Version 4.3.3 |
3 | 3 | by dlloydev https://github.com/Dlloydev/ESP32-ESP32S2-AnalogWrite
|
4 | 4 | This Library is licensed under the MIT License
|
5 | 5 | *******************************************************************/
|
@@ -47,36 +47,28 @@ float Pwm::write(uint8_t pin, uint32_t duty, uint32_t frequency, uint8_t resolut
|
47 | 47 |
|
48 | 48 | float Pwm::writeServo(uint8_t pin, float value, float speed, float ke) {
|
49 | 49 | uint8_t ch = attached(pin);
|
50 |
| - bool ms = millis() >> 3 & 1; |
51 |
| - if (ms && !mem[ch].pms) { |
52 |
| - wr_servo(pin, value, speed, ke); |
53 |
| - } |
54 |
| - mem[ch].pms = ms; |
| 50 | + wr_servo(pin, value, speed, ke); |
55 | 51 | return (ke < 1.0) ? mem[ch].ye : value; // normalized easing duty (0.0 - 1.0)
|
56 | 52 | }
|
57 | 53 |
|
58 | 54 | float Pwm::writeServo(uint8_t pin, float value) {
|
59 | 55 | uint8_t ch = attached(pin);
|
60 |
| - bool ms = millis() >> 3 & 1; |
61 |
| - if (ms && !mem[ch].pms) { |
62 |
| - if (ch == 253) { // free channels exist |
63 |
| - for (uint8_t c = 0; c < chMax; c++) { |
64 |
| - if (mem[c].pin == 255 && ch == 253) { //first free ch |
65 |
| - mem[c].pin = pin; |
66 |
| - ch = c; |
67 |
| - if (mem[ch].frequency < 40 || mem[ch].frequency > 900) mem[ch].frequency = 50; |
68 |
| - if (mem[ch].resolution > widthMax) mem[ch].resolution = widthMax; |
69 |
| - else if (mem[ch].resolution < 14 && widthMax == 20) mem[ch].resolution = 16; |
70 |
| - else if (mem[ch].resolution < 14) mem[ch].resolution = 14; |
71 |
| - ledcSetup(ch, mem[ch].frequency, mem[ch].resolution); |
72 |
| - if (sync) pause(ch); |
73 |
| - ledcAttachPin(pin, ch); |
74 |
| - } |
| 56 | + if (ch == 253) { // free channels exist |
| 57 | + for (uint8_t c = 0; c < chMax; c++) { |
| 58 | + if (mem[c].pin == 255 && ch == 253) { //first free ch |
| 59 | + mem[c].pin = pin; |
| 60 | + ch = c; |
| 61 | + if (mem[ch].frequency < 40 || mem[ch].frequency > 900) mem[ch].frequency = 50; |
| 62 | + if (mem[ch].resolution > widthMax) mem[ch].resolution = widthMax; |
| 63 | + else if (mem[ch].resolution < 14 && widthMax == 20) mem[ch].resolution = 16; |
| 64 | + else if (mem[ch].resolution < 14) mem[ch].resolution = 14; |
| 65 | + ledcSetup(ch, mem[ch].frequency, mem[ch].resolution); |
| 66 | + if (sync) pause(ch); |
| 67 | + ledcAttachPin(pin, ch); |
75 | 68 | }
|
76 | 69 | }
|
77 |
| - wr_servo(pin, value, mem[ch].speed, mem[ch].ke); |
78 | 70 | }
|
79 |
| - mem[ch].pms = ms; |
| 71 | + wr_servo(pin, value, mem[ch].speed, mem[ch].ke); |
80 | 72 | return (mem[ch].ke < 1.0) ? mem[ch].ye : value; // normalized easing duty (0.0 - 1.0)
|
81 | 73 | }
|
82 | 74 |
|
@@ -248,43 +240,19 @@ uint8_t Pwm::setResolution(uint8_t pin, uint8_t resolution) {
|
248 | 240 | return mem[ch].resolution;
|
249 | 241 | }
|
250 | 242 |
|
251 |
| -void Pwm::printConfig() { |
252 |
| - Serial.print(F("PWM pins: ")); |
| 243 | +void Pwm::printDebug() { |
| 244 | + Serial.printf("PWM pins:\n"); |
253 | 245 | for (uint8_t i = 0; i < 48; i++) {
|
254 | 246 | if ((pinMask >> i) & 1) {
|
255 |
| - Serial.print(i); Serial.print(F(", ")); |
| 247 | + Serial.printf("%d,", i); |
256 | 248 | }
|
257 | 249 | }
|
258 |
| - Serial.println(); |
259 |
| - Serial.println(); |
260 |
| - Serial.println(F("Ch Pin Hz Res Duty Phase Servo")); |
| 250 | + Serial.printf("\n\nCh Pin Hz Res Duty Servo Speed ke\n"); |
261 | 251 | for (uint8_t ch = 0; ch < chMax; ch++) {
|
262 |
| - if (ch < 10) Serial.print(F(" ")); |
263 |
| - Serial.print(ch); |
264 |
| - Serial.print(F(" ")); |
265 |
| - if (mem[ch].pin < 100) Serial.print(F(" ")); |
266 |
| - if (mem[ch].pin < 10) Serial.print(F(" ")); |
267 |
| - Serial.print(mem[ch].pin); Serial.print(F(" ")); |
268 |
| - if (mem[ch].frequency < 10000) Serial.print(F(" ")); |
269 |
| - if (mem[ch].frequency < 1000) Serial.print(F(" ")); |
270 |
| - if (mem[ch].frequency < 100) Serial.print(F(" ")); |
271 |
| - if (mem[ch].frequency < 10) Serial.print(F(" ")); |
272 |
| - Serial.print(mem[ch].frequency, 1); Serial.print(F(" ")); |
273 |
| - if (mem[ch].resolution < 10) Serial.print(F(" ")); |
274 |
| - Serial.print(mem[ch].resolution); Serial.print(F(" ")); |
275 |
| - if (mem[ch].duty < 1000) Serial.print(F(" ")); |
276 |
| - if (mem[ch].duty < 100) Serial.print(F(" ")); |
277 |
| - if (mem[ch].duty < 10) Serial.print(F(" ")); |
278 |
| - Serial.print(mem[ch].duty); Serial.print(F(" ")); |
279 |
| - if (mem[ch].phase < 1000) Serial.print(F(" ")); |
280 |
| - if (mem[ch].phase < 100) Serial.print(F(" ")); |
281 |
| - if (mem[ch].phase < 10) Serial.print(F(" ")); |
282 |
| - Serial.print(mem[ch].phase); Serial.print(F(" ")); |
283 |
| - Serial.print(mem[ch].servoMinUs); Serial.print(F(" ")); |
284 |
| - Serial.print(mem[ch].servoDefUs); Serial.print(F(" ")); |
285 |
| - Serial.print(mem[ch].servoMaxUs); |
286 |
| - Serial.println(); |
| 252 | + Serial.printf ("%2d %3d %5.0f %2d %4d %d-%d-%d %5.1f %1.1f\n", ch, mem[ch].pin, mem[ch].frequency, mem[ch].resolution, |
| 253 | + mem[ch].duty, mem[ch].servoMinUs, mem[ch].servoDefUs, mem[ch].servoMaxUs, mem[ch].speed, mem[ch].ke); |
287 | 254 | }
|
| 255 | + Serial.printf("\n"); |
288 | 256 | }
|
289 | 257 |
|
290 | 258 | /************************* private functions ***************************/
|
@@ -441,4 +409,6 @@ void Pwm::reset_fields(uint8_t ch) {
|
441 | 409 | mem[ch].servoMinUs = 544;
|
442 | 410 | mem[ch].servoDefUs = 1472;
|
443 | 411 | mem[ch].servoMaxUs = 2400;
|
| 412 | + mem[ch].speed = 0; |
| 413 | + mem[ch].ke = 1.0; |
444 | 414 | }
|
0 commit comments