// https://wokwi.com/projects/327104226065908307
// for https://forum.arduino.cc/t/problems-with-interrupt-not-always-working-fast-enough/968966/34
const int myLED = LED_BUILTIN;
unsigned long blinkRateMs = 500;
void setup() {
pinMode(myLED, OUTPUT);
Serial.begin(115200);
}
void loop() {
blinkLED();
//:
// other stuff
//:
}
//...
void blinkLED() {
// keep the important values for next time around.
const unsigned long blinkTimeMs = 50; // on time
const unsigned long pauseTimeMs = 200;
const unsigned long longPauseTimeMs = 800;
static unsigned long lastBlinkMs;
static bool toggle = false;
static bool shortPause = true;
// is it time to blink ?
if (millis() - lastBlinkMs >= blinkRateMs) {
digitalWrite(myLED, toggle = !toggle); // flip the toggle state
if (!toggle) {
if (shortPause) {
shortPause = false;
blinkRateMs = longPauseTimeMs;
} else {
shortPause = true;
blinkRateMs = pauseTimeMs;
}
}else{
blinkRateMs = blinkTimeMs;
}
lastBlinkMs = millis(); // ready for next blink
//Serial.print(blinkRateMs); Serial.print(",");
}
}