const byte buttonPin = 2; // button between pin and ground, no resistor
const byte ledPin = 5;
bool ledOn, dimDown;
byte pwmValue = 100; // default mid brightness
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode (ledPin, OUTPUT);
}
void loop() {
if (!digitalRead(buttonPin)) delay(20); // debounce time
if (!digitalRead(buttonPin)) { // if still pressed
delay(500); // long press?
if (!digitalRead(buttonPin)) { // long press
while (!digitalRead(buttonPin)) {
if (dimDown) {
if (pwmValue > 10) pwmValue--;
}
else {
if (pwmValue < 255) pwmValue++;
}
analogWrite(ledPin, pwmValue);
delay(25); // time between dim steps (dim speed)
}
dimDown = !dimDown; // flip direction
} else { // short press
if (ledOn) { // if on, turn off
digitalWrite (ledPin, LOW);
ledOn = false; // remember
dimDown = false; // force dim up at next turn on
} else { // if off, set to previous brightness value
analogWrite (ledPin, pwmValue);
ledOn = true; // remember
}
}
}
}