@@ -265,9 +265,10 @@ OCR2A = encoder.position * 255 / encoder.stepPerRevolution;
265
265
266
266
### Librería
267
267
268
- rotaryEncoder.hpp
268
+ Se demuestra en base a la explicación anterior la librería resultante. El código es iterado y optimizado para su producción en el [ repositorio de Github] ( https://github.com/jackestar/Baremetal/tree/main/RotaryEncoder/C ) esta actualizado y revisado por lo que difiere de la version a continuación.
269
+
270
+ * rotaryEncoder.hpp*
269
271
``` cpp
270
- // Rotary Relative Encoder
271
272
272
273
#ifndef _ROTARY_ENCODER_
273
274
@@ -294,7 +295,7 @@ class RotaryEncoder
294
295
volatile uint8_t *pinBPort;
295
296
uint8_t pinBBit;
296
297
uint8_t stepPerRevolution;
297
- uint8_t position; // 8bit resolution
298
+ uint8_t position;
298
299
299
300
RotaryEncoder (volatile uint8_t * pinAPort, uint8_t pinABit, volatile uint8_t * pinBPort, uint8_t pinBBit, uint8_t stepPerRevolution);
300
301
void read();
@@ -310,14 +311,12 @@ class RotaryEncoder
310
311
#endif
311
312
```
312
313
313
- rotaryEncoder.cpp
314
+ * rotaryEncoder.cpp*
314
315
```cpp
315
316
#include "rotaryEncoder.hpp"
316
317
317
318
RotaryEncoder::RotaryEncoder(volatile uint8_t *pinAPort, uint8_t pinABit, volatile uint8_t *pinBPort, uint8_t pinBBit, uint8_t stepPerRevolution)
318
319
: pinAPort(pinAPort), pinABit(pinABit), pinBPort(pinBPort), pinBBit(pinBBit), stepPerRevolution(stepPerRevolution), step(0), position(0), direction(ENCODER_STOPPED) {
319
- // if (pinAPort == pinBPort && pinABit == pinBBit)
320
- // static_assert(true, "A signal and B signal cannot be the same");
321
320
}
322
321
323
322
inline void RotaryEncoder::positionInc() {
@@ -430,19 +429,17 @@ void RotaryEncoder::reset() {
430
429
431
430
int main (void)
432
431
{
432
+ // Entradas
433
433
DDRD &= ~ (1 << DDD5); // A (Pin 5)
434
434
DDRD &= ~ (1 << DDD6); // B (Pin 6)
435
435
DDRD &= ~ (1 << DDD7); // Swh (Pin 7)
436
436
437
- // 13 as output to show direction
438
- // 12 as output toggle button
439
- // 11 as output to show errors
437
+ // Salidas
440
438
DDRB |= (1 << DDB5); // Dir (Pin 13)
441
439
DDRB |= (1 << DDB4); // Tgl (Pin 12)
442
440
DDRB |= (1 << DDB3); // DIM (Pin 11)
443
441
444
- // no-inverter mode
445
- // Fix frequency PWM
442
+ // No inversor de frecuencia fija
446
443
TCCR2A = 0 | (1 << COM2A1) | (1 << WGM21) | (1 << WGM20);
447
444
448
445
// No prescaler
@@ -478,4 +475,12 @@ int main(void)
478
475
479
476
```
480
477
481
- YouTube Demo: [Rotary Encoder Library - example_rotary_encoder.cc [Test]](https://youtu.be/ZgM7oFhrcaU)
478
+ ### Video de Demostración
479
+
480
+ <hr/>
481
+
482
+ <div align="center">
483
+
484
+ <iframe width="560" height="315" src="https://www.youtube.com/embed/ZgM7oFhrcaU?si=5afGIDUQ3yD4WHAB" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
485
+
486
+ </div>
0 commit comments