const int encoderPinA = 12; // GPIO-pin voor kanaal A van de encoder
const int encoderPinB = 13; // GPIO-pin voor kanaal B van de encoder
volatile int encoderPosition = 0; // Variabele om de positie van de encoder bij te houden
volatile int lastEncoded = 0; // Variabele om de vorige staat van de encoder bij te houden
void IRAM_ATTR updateEncoder()
{
int MSB = digitalRead(encoderPinA); // Most significant bit
int LSB = digitalRead(encoderPinB); // Least significant bit
int encoded = (MSB << 1) | LSB; // Combineren van de twee bits om een enkel getal te krijgen
int sum = (lastEncoded << 2) | encoded; // Combineren van vorige en huidige staat
if (sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011) encoderPosition++;
if (sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000) encoderPosition--;
lastEncoded = encoded; // Bijwerken van de vorige staat
}
void setup()
{
Serial.begin(115200);
pinMode(encoderPinA, INPUT_PULLUP);
pinMode(encoderPinB, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(encoderPinA), updateEncoder, CHANGE);
attachInterrupt(digitalPinToInterrupt(encoderPinB), updateEncoder, CHANGE);
}
void loop()
{
// Enkele seconden wachten om de resultaten te bekijken
delay(1000);
Serial.print("Encoder Position: ");
Serial.println(encoderPosition);
}Serial.println(encoderPosition);
}