lamp_control/arc_lamp_control.ino
2024-09-17 00:52:12 +00:00

83 lines
1.7 KiB
C++

#include <ezButton.h>
#define ROT_A 12
#define ROT_B 11
#define LEDS 10
ezButton button (6);
int brightness = 125;
int power = 0;
int aState;
int aLastState;
void setup() {
// Initialize pins
pinMode(ROT_A, INPUT_PULLUP);
pinMode(ROT_B, INPUT_PULLUP);
pinMode(LEDS, OUTPUT);
// Configure button debounce
button.setDebounceTime(50);
aLastState = digitalRead(ROT_A);
}
void loop() {
// Initialize ezbutton
button.loop();
// ROTARY ENCODER CONTROL //
// Read state of encoder pin A
aState = digitalRead(ROT_A);
// Check if it's changed
if (aState != aLastState && aState == 1){
if (digitalRead(ROT_B) != aState){ // If it has...
if (brightness < 225 && brightness >= 5){
brightness += 5; // Up the brightness
}
else if (brightness < 5) {
brightness++; // If our brightness is low (below duty cycle 5) we only want one step
}
else if (brightness >= 225 && brightness < 255) {
brightness += 10; // As we get brighter we need larger steps
}
} else {
if (brightness > 5 && brightness < 225){
brightness -= 5;
}
else if (brightness <= 5 && brightness > 1) {
brightness--;
}
else if (brightness >= 225) {
brightness -= 10;
}
}
}
aLastState = aState;
// BUTTON CONTROL //
// Check button state
if (button.isPressed()){
if (power == 0){ // If off, turn on...
power = 1;
} else { // If on, turn off
power = 0;
}
}
if (button.isReleased()){
// DO NOTHING
}
if (power == 1) {
analogWrite (LEDS, brightness);
} else {
analogWrite (LEDS, 0);
}
delay(1);
}