29 lines
684 B
C
29 lines
684 B
C
|
// Rotary knob implementation - Version 2.
|
||
|
// Uses 2 digital pins - D2 (via interrupt) & D6.
|
||
|
// #include "rev1.h"
|
||
|
#include <avr/io.h>
|
||
|
#include <avr/interrupt.h>
|
||
|
#include <stdbool.h>
|
||
|
|
||
|
#ifndef ENCODER_PIN_1
|
||
|
#define ENCODER_PIN_1 PD2
|
||
|
#endif
|
||
|
#ifndef ENCODER_PIN_2
|
||
|
#define ENCODER_PIN_2 PD6
|
||
|
#endif
|
||
|
#ifndef ENCODER_INT
|
||
|
#define ENCODER_INT INT2_vect
|
||
|
#endif
|
||
|
|
||
|
typedef struct knob_report_t {
|
||
|
int8_t dir; // Contains number of rotations that happened
|
||
|
int8_t phase; // Contains 0 if last rotation happened on 90 degrees, 1 if on 270
|
||
|
} knob_report_t;
|
||
|
|
||
|
void knob_init(void);
|
||
|
knob_report_t knob_report_read(void);
|
||
|
void knob_report_reset(void);
|
||
|
|
||
|
bool knob_prev_a;
|
||
|
int8_t knob_dir;
|