#include <Arduino.h>
#include <chrono>
#include <condition_variable>
#include <iostream>
#include <mutex>
#include <thread>
static bool abortFlag;
static std::mutex m;
static std::condition_variable cv;
static std::thread thread([]() {
std::cout << "thread started" << std::endl;
std::unique_lock<std::mutex> lock(m);
if (!cv.wait_for(lock, std::chrono::seconds(3), [&]() { return abortFlag; })) {
std::cout << "continue..." << std::endl;
} else {
std::cout << "abort" << std::endl;
}
});
static void isr() {
abortFlag = true;
cv.notify_all();
}
constexpr auto inputPin = 1;
void setup() {
Serial.begin(115200);
Serial.println("Hello world!");
pinMode(inputPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(inputPin), isr, CHANGE);
}
void loop() { delay(10); }