const int button_1_pin = 2;
const int button_2_pin = 3;
const int led_pin = 4;
int led_state = LOW;
int button_1_state_last = LOW;
int button_1_state_current;
int button_2_state_last = LOW;
int button_2_state_current;
int button_1_mode = 0;
int button_2_mode = 0;
int last_button = 1;
int t = 0;
unsigned long last_debounce_time = 0;
const unsigned long debounce_delay = 10;
const unsigned int delta_t_fast = 200;
const unsigned int delta_t_slow = 400;
void setup() {
// put your setup code here, to run once:
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
// https://docs.arduino.cc/built-in-examples/digital/Button
// https://docs.arduino.cc/built-in-examples/digital/Debounce
// Debounce button 1
int button_1_reading = digitalRead(button_1_pin);
if(button_1_reading != button_1_state_last) {
last_debounce_time = millis();
}
if((millis() - last_debounce_time) > debounce_delay) {
if(button_1_reading != button_1_state_current) {
button_1_state_current = button_1_reading;
if (button_1_state_current == HIGH) {
// led_state = !led_state;
button_1_mode = !button_1_mode;
last_button = 1;
}
}
}
button_1_state_last = button_1_reading;
// Debounce button 2
int button_2_reading = digitalRead(button_2_pin);
if(button_2_reading != button_2_state_last) {
last_debounce_time = millis();
}
if((millis() - last_debounce_time) > debounce_delay) {
if(button_2_reading != button_2_state_current) {
button_2_state_current = button_2_reading;
if (button_2_state_current == HIGH) {
// led_state = !led_state;
button_2_mode = !button_2_mode;
last_button = 2;
t = millis();
}
}
}
button_2_state_last = button_2_reading;
switch(last_button) {
case 1:
if(button_1_mode == 0) {
digitalWrite(led_pin, LOW);
} else {
digitalWrite(led_pin, HIGH);
}
break;
case 2:
if(button_2_mode == 0) {
// t = millis();
// led_state = !led_state;
if(millis() - t >= delta_t_slow) {
led_state = !led_state;
digitalWrite(led_pin, led_state);
t = millis();
}
} else {
// t = millis();
// led_state = !led_state;
if(millis() - t >= delta_t_fast) {
led_state = !led_state;
digitalWrite(led_pin, led_state);
t = millis();
}
}
break;
}
// digitalWrite(led_pin, led_state);
}