Here is the video and code for my latest video where I code in real time on a live stream. A short press will enable or disable the blink function. A long press will display humidity while the button is being pressed and stop when released but it won’t affect the blink function.
Watch the Video
View the Code
#include "DHT.h"
const char BTN_PIN = 4;
const char HUMID_PIN = 5;
const bool IS_PRESSED = false;
const unsigned long SHORT_PRESS_LIMIT_MS = 1000;
const unsigned long BLINK_DURATION_MS = 1000;
bool shouldBlink = false;
bool shouldReadHumid = false;
DHT humidSensor(HUMID_PIN, DHT22);
void setup() {
Serial.begin(9600);
pinMode(BTN_PIN, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
humidSensor.begin();
Serial.println("Ready...");
}
void loop() {
if (digitalRead(BTN_PIN) == IS_PRESSED) {
unsigned long pushTime = millis();
while (digitalRead(BTN_PIN) == IS_PRESSED) {
// Do nothing while the button is pressed
if (millis() - pushTime > SHORT_PRESS_LIMIT_MS) {
myReadHumidity();
}
blinkLED();
}
unsigned long dt = millis() - pushTime;
if (dt <= SHORT_PRESS_LIMIT_MS) {
// Do short press stuff
shouldBlink = !shouldBlink;
}
}
// Call all our functions
blinkLED();
}
void myReadHumidity() {
// (Play sound)
float humidity = humidSensor.readHumidity();
Serial.print("Humidity: ");
Serial.println(humidity);
}
void blinkLED() {
static bool ledOn = false;
static unsigned long lastStateChange = millis();
if (shouldBlink) {
unsigned long dt = millis() - lastStateChange;
if (dt >= BLINK_DURATION_MS) {
ledOn = !ledOn;
lastStateChange = millis();
}
digitalWrite(LED_BUILTIN, ledOn);
} else {
digitalWrite(LED_BUILTIN, LOW);
}
}



