// timing in microseconds
uint32_t timerInterval = 2000;
uint32_t previousMicros = 0;
struct Pulse {
uint32_t startTime;
uint16_t pulseWidth;
bool isOn;
};
Pulse Pulses[3] = {
{0, 1000, false},
{0, 1500, false},
{0, 2000, false}
};
int leds[3] = {3, 5, 6};
void setup() {
Serial.begin(115200);
Serial.println(F("Software PWM"));
for (uint8_t cnt = 0; cnt < 3; cnt++) {
pinMode(leds[cnt], OUTPUT);
}
}
void loop() {
unsigned long currentMicros = micros();
if (currentMicros - previousMicros >= timerInterval) {
previousMicros = currentMicros;
for (int i = 0; i < 3; i++)
if (Pulses[i].pulseWidth > 0) {
digitalWrite(leds[i], HIGH);
}
} else {
for (int i = 0; i < 3; i++) {
if (currentMicros - previousMicros >= Pulses[i].pulseWidth && Pulses[i].pulseWidth < 2000 ) {
digitalWrite(leds[i], LOW);
}
}
}
}