Enthernet Code
Enthernet Code
DIIDevHeads IoT Integration Server
Created by Camila_99$$ on 9/12/2024 in #code-review
How to Execute a Timed LED On/Off Sequence Using millis() Function
@Camila_99$$ Hello I see what you’re trying to achieve, and it’s great that you’re using millis() for non-blocking timing to allow other actions to run in parallel. However, there seems to be a logic issue in your code with the intervals and the use of the ternary operators. The conditions are overlapping and might be causing unexpected behavior. Try this out
unsigned long currentMillis = millis(); // Get the current time
unsigned long interval = currentMillis - timer2; // Calculate the time elapsed

if (interval < 1000) {
digitalWrite(motor, LOW); // 0 - 1000 ms: off
} else if (interval < 1100) {
digitalWrite(motor, HIGH); // 1000 - 1100 ms: on
} else if (interval < 1200) {
digitalWrite(motor, LOW); // 1100 - 1200 ms: off
} else if (interval < 1500) {
digitalWrite(motor, HIGH); // 1200 - 1500 ms: on
} else if (interval < 1600) {
digitalWrite(motor, LOW); // 1500 - 1600 ms: off
} else if (interval < 2000) {
digitalWrite(motor, HIGH); // 1600 - 2000 ms: on
} else {
timer2 = millis(); // Reset timer2 when the sequence ends (>= 2000 ms)
}
unsigned long currentMillis = millis(); // Get the current time
unsigned long interval = currentMillis - timer2; // Calculate the time elapsed

if (interval < 1000) {
digitalWrite(motor, LOW); // 0 - 1000 ms: off
} else if (interval < 1100) {
digitalWrite(motor, HIGH); // 1000 - 1100 ms: on
} else if (interval < 1200) {
digitalWrite(motor, LOW); // 1100 - 1200 ms: off
} else if (interval < 1500) {
digitalWrite(motor, HIGH); // 1200 - 1500 ms: on
} else if (interval < 1600) {
digitalWrite(motor, LOW); // 1500 - 1600 ms: off
} else if (interval < 2000) {
digitalWrite(motor, HIGH); // 1600 - 2000 ms: on
} else {
timer2 = millis(); // Reset timer2 when the sequence ends (>= 2000 ms)
}
2 replies