#define BTN_PIN PA1
#define LED1 PA4
#define LED2 PA5
#define LED3 PA6
int state = 0;
unsigned long lastScan = 0;
bool lastBtn = HIGH;
void setLEDs(int s) {
digitalWrite(LED1, (s == 0) ? HIGH : LOW);
digitalWrite(LED2, (s == 1) ? HIGH : LOW);
digitalWrite(LED3, (s == 2) ? HIGH : LOW);
}
void setup() {
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(BTN_PIN, INPUT_PULLUP); // button to GND
setLEDs(state); // start with LED1 ON
}
void loop() {
// Scan only every 20ms (VERY CPU friendly)
if (millis() - lastScan < 20) return;
lastScan = millis();
bool btn = digitalRead(BTN_PIN);
// Detect press edge: HIGH -> LOW
if (lastBtn == HIGH && btn == LOW) {
state++;
if (state > 3) state = 0;
setLEDs(state);
}
lastBtn = btn;
}