// from https://docs.arduino.cc/tutorials/generic/secrets-of-arduino-pwm
// modified to be non-blocking
// https://wokwi.com/projects/371148004268653569
void setup()
{
pinMode(13, OUTPUT);
}
void loop(void) {
pwm();
}
void pwm()
{
constexpr unsigned long periodUs = 1000UL;
constexpr unsigned long onUs = periodUs * 0.10;
static int state = LOW;
static unsigned long last = -periodUs;
static unsigned long interval = periodUs - onUs;
if (micros() - last < interval ) return;
last += interval;
if (state == LOW) {
digitalWrite(13, HIGH);
state = HIGH;
interval = onUs;
} else {
digitalWrite(13, LOW);
state = LOW;
interval = periodUs - onUs;
}
}