#include <BlockNot.h>
#define ENCODER_PIN_A PB0
#define ENCODER_PIN_B PB1
BlockNot nonblockingTimer(5); // 5ms nonblocking timer
volatile long encoderValue = 0;
void setup() {
pinMode(ENCODER_PIN_A, INPUT_PULLUP);
pinMode(ENCODER_PIN_B, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(ENCODER_PIN_A), encoderInterrupt, CHANGE);
attachInterrupt(digitalPinToInterrupt(ENCODER_PIN_B), encoderInterrupt, CHANGE);
Serial.begin(115200);
}
void loop() {
if (nonblockingTimer.TRIGGERED) {
encoderInterrupt();
}
}
void encoderInterrupt() {
static int lastMSB = digitalRead(ENCODER_PIN_A);
int MSB = digitalRead(ENCODER_PIN_A);
int LSB = digitalRead(ENCODER_PIN_B);
if (MSB != lastMSB) {
if (MSB == LSB) {
encoderValue++;
Serial.println("> Encoder++");
} else {
encoderValue--;
Serial.println("> Encoder--");
}
}
lastMSB = MSB;
}