/*
https://forum.arduino.cc/t/press-button-and-have-led1-come-on-after-5s-delay-and-led2-simply-turn-on/1261609
*/
unsigned long lastPress = 0;
unsigned long intervalDebounce = 50;
byte lastBtn = 1; //start high with input pullup
unsigned long lastWait;
unsigned long intervalWait1 = 1000; // 1s delay
unsigned long intervalWait2 = 500; // .5s delay
unsigned long intervalWait3 = 750; // .75s delay
#define BTN_PIN 3 //Push button on D3
#define LED1_PIN 4 //LED 1
#define LED2_PIN 5 //LED 2
#define POT_PIN A5 //the pots..
int LED1_state = 0;
int LED2_state = 0;
//-----------------------------------------------------------------------
int state = 0; //integer to hold current state
int old = 0; //integer to hold last state
int buttonPoll = 0; //integer to hold button state
//------------------------------------------------------------------------
void setup() {
Serial.begin(115200);
pinMode(BTN_PIN, INPUT_PULLUP); //button as input activate internal pull up
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
}
//----------------------------------------------------------------------------------
void loop() {
//potentiometer code
//button code
unsigned long now = millis();
if (now - lastPress >= intervalDebounce) {
byte b = digitalRead(BTN_PIN);
if (b != lastBtn) {
lastBtn = b;
lastPress = now;//start debounce
if (b) {
//button press and released..
lastWait = now;
state++;
if (state > 3) state = 1;
Serial.print("Button Press state: ");
Serial.println(state);
}
}
}
// potentiometer code; tutorial: https://www.youtube.com/watch?v=Wa8CjGsOFzY&t=2s
static int lastSensorVal = 0;
static int brightness = 0;
int sensorValue = analogRead(POT_PIN);
if (lastSensorVal != sensorValue){
lastSensorVal = sensorValue;
brightness = map(sensorValue, 0, 1023, 0, 255);
float voltage = sensorValue * (5.0 / 1023.0);
//int brightness = sensorValue / 4;
analogWrite(11, brightness);
Serial.println(voltage);
Serial.print("Voltage: ");
}
//switch states
switch (state) {
case 1: ////LED1 turns on after .5s delay, and LED2 simply turns on
if (now - lastWait >= intervalWait1) {
digitalWrite(LED1_PIN, HIGH); // on after 1s delay
} else digitalWrite(LED1_PIN, LOW);
if (now - lastWait >= intervalWait3) {
digitalWrite(LED2_PIN, HIGH); // on after .75s delay
} else digitalWrite(LED2_PIN, LOW);
break;
case 2: ////LED1 turns on afer .5s, and LED2 turns on after a 1s delay
if (now - lastWait >= intervalWait3) {
digitalWrite(LED1_PIN, HIGH); // on after .75s delay
} else digitalWrite(LED1_PIN, LOW);
if (now - lastWait >= intervalWait1) {
digitalWrite(LED2_PIN, HIGH); // on after 1s delay
} else digitalWrite(LED2_PIN, LOW);
break;
case 3: //// both LED1 and LED2 turn on with .5s delay
if (now - lastWait >= intervalWait2) {
digitalWrite(LED1_PIN, HIGH); // on after .5s delay
} else digitalWrite(LED1_PIN, LOW);
if (now - lastWait >= intervalWait2) {
digitalWrite(LED2_PIN, HIGH);
} else digitalWrite(LED2_PIN, LOW);
break;
default: //// both LED1 and LED2 simply turn on without delay
if (now - lastWait >= intervalWait1) {
digitalWrite(LED1_PIN, HIGH); // on after 1s delay
} else digitalWrite(LED1_PIN, LOW);
if (now - lastWait >= intervalWait1) {
digitalWrite(LED2_PIN, HIGH); // on after 1s delay
} else digitalWrite(LED2_PIN, LOW);
break;
}
}