#include <BfButton.h>
int btnPin = 4; //GPIO #3-Push button on encoder
int DT = 3; //GPIO #4-DT on encoder (Output B)
int CLK = 2; //GPIO #5-CLK on encoder (Output A)
int LED_Pin = 6; //Pin used for PWM signal to control LED brightness
BfButton btn(BfButton::STANDALONE_DIGITAL, btnPin, true, LOW);
int counter = 0;
int angle = 0;
int aState;
int aLastState;
//Button press hanlding function
void pressHandler(BfButton *btn, BfButton::press_pattern_t pattern) {
switch (pattern) {
case BfButton::SINGLE_PRESS:
Serial.println("Single push");
counter = 255;
Serial.println(counter);
break;
case BfButton::DOUBLE_PRESS:
Serial.println("Double push");
counter = 70;
Serial.println(counter);
break;
case BfButton::LONG_PRESS:
Serial.println("Long push");
counter = 0;
Serial.println(counter);
break;
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println(angle);
pinMode(CLK, INPUT_PULLUP);
pinMode(DT, INPUT_PULLUP);
pinMode(LED_Pin, OUTPUT);
aLastState = digitalRead(CLK);
//Button settings
btn.onPress(pressHandler)
.onDoublePress(pressHandler) // default timeout
.onPressFor(pressHandler, 1000); // custom timeout for 1 second
}
void loop() {
// put your main code here, to run repeatedly:
//Wait for button press to execute commands
btn.read();
//Encoder rotation tracking
aState = digitalRead(CLK);
if (aState != aLastState) {
if (digitalRead(DT) != aState) {
counter++;
angle++;
} else {
counter--;
angle--;
}
if (counter >= 255) {
counter = 255;
}
if (counter <= 0) {
counter = 0;
}
Serial.println(angle);
}
aLastState = aState;
analogWrite(LED_Pin, counter); //Set the LED brightness
}