#define no_team 0
#define rotated_left 21
#define rotated_rights 22
#define p_clk 2
#define p_dt 3
void setup() {
Serial.begin (9600);
attachInterrupt(digitalPinToInterrupt(p_dt), InterruptReadPinDT, CHANGE);
}
void loop() {
switch (Encoder(no_team)) {
case rotated_rights:
Serial.println("rotated_right");
break;
case rotated_left:
Serial.println("rotated_left");
break;
}
}
void InterruptReadPinDT() {
volatile static int8_t clkStateCurrent;
volatile static int8_t clkStateLast;
clkStateCurrent = digitalRead(p_clk);
if ((clkStateLast == LOW) && (clkStateCurrent == HIGH)) {
if (digitalRead(p_dt) == HIGH) {
Encoder(rotated_rights);
} else {
Encoder(rotated_left);
}
}
clkStateLast = clkStateCurrent;
}
int8_t Encoder(int8_t Host) {
static int8_t sPos;
if (!Host && !sPos) {
return 0;
}
else if (Host && !sPos) {
sPos = Host;
}
else if (!Host && sPos) {
Host = sPos;
sPos = 0;
return Host;
}
return 0;
}