Created
March 16, 2024 01:30
-
-
Save raspberrypisig/46fe441b0d67b3114010742099c7a037 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define CLK 2 | |
#define DT 3 | |
#define SW 4 | |
int counter = 0; | |
int currentStateCLK; | |
int lastStateCLK; | |
String currentDir =""; | |
unsigned long lastButtonPress = 0; | |
void setup() { | |
// Set encoder pins as inputs | |
pinMode(CLK,INPUT_PULLUP); | |
pinMode(DT,INPUT_PULLUP); | |
pinMode(SW, INPUT_PULLUP); | |
// Setup Serial Monitor | |
Serial.begin(9600); | |
// Read the initial state of CLK | |
lastStateCLK = digitalRead(CLK); | |
} | |
void loop() { | |
// Read the current state of CLK | |
currentStateCLK = digitalRead(CLK); | |
// If last and current state of CLK are different, then pulse occurred | |
// React to only 1 state change to avoid double count | |
if (currentStateCLK != lastStateCLK && currentStateCLK == 1){ | |
// If the DT state is different than the CLK state then | |
// the encoder is rotating CCW so decrement | |
if (digitalRead(DT) != currentStateCLK) { | |
counter --; | |
currentDir ="CCW"; | |
} else { | |
// Encoder is rotating CW so increment | |
counter ++; | |
currentDir ="CW"; | |
} | |
Serial.print("Direction: "); | |
Serial.print(currentDir); | |
Serial.print(" | Counter: "); | |
Serial.println(counter); | |
} | |
// Remember last CLK state | |
lastStateCLK = currentStateCLK; | |
// Read the button state | |
int btnState = digitalRead(SW); | |
//If we detect LOW signal, button is pressed | |
if (btnState == LOW) { | |
//if 50ms have passed since last LOW pulse, it means that the | |
//button has been pressed, released and pressed again | |
if (millis() - lastButtonPress > 50) { | |
Serial.println("Button pressed!"); | |
} | |
// Remember last button press event | |
lastButtonPress = millis(); | |
} | |
// Put in a slight delay to help debounce the reading | |
delay(1); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment