#define POT_PIN A0
#define BUTTON1 2
#define BUTTON2 3
#define LED1 4
#define LED2 5
#define LED3 6
int mode = 0; // 0: None, 1: Function 1, 2: Function 2
unsigned long lastDebounceTime1 = 0;
unsigned long lastDebounceTime2 = 0;
const unsigned long debounceDelay = 50;
void setup() {
pinMode(POT_PIN, INPUT);
pinMode(BUTTON1, INPUT_PULLUP);
pinMode(BUTTON2, INPUT_PULLUP);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}
void loop() {
unsigned long currentMillis = millis();
if (digitalRead(BUTTON1) == LOW && (currentMillis - lastDebounceTime1 > debounceDelay)) {
mode = 0;
mode = 1;
lastDebounceTime1 = currentMillis;
}
if (digitalRead(BUTTON2) == LOW && (currentMillis - lastDebounceTime2 > debounceDelay)) {
mode = 0;
mode = 2;
lastDebounceTime2 = currentMillis;
}
if (mode == 1) {
function1();
} else if (mode == 2) {
function2();
} else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
}
}
void function1() {
int potValue = analogRead(POT_PIN);
static unsigned long lastBlinkTime = 0;
static int ledIndex = 0;
unsigned long currentMillis = millis();
if (potValue < 100) {
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
} else {
int numLEDs = (potValue < 340) ? 1 : (potValue < 680) ? 2 : 3;
if (currentMillis - lastBlinkTime >= 1000) {
lastBlinkTime = currentMillis;
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
if (ledIndex < numLEDs) {
digitalWrite(LED1 + ledIndex, HIGH);
}
ledIndex = (ledIndex + 1) % numLEDs;
}
}
}
void function2() {
int potValue = analogRead(POT_PIN);
int level = map(potValue, 0, 1023, 0, 7);
digitalWrite(LED1, bitRead(level, 0));
digitalWrite(LED2, bitRead(level, 1));
digitalWrite(LED3, bitRead(level, 2));
}