// Forum: https://forum.arduino.cc/t/timing-problem-with-millis/1228406
// This Wokwi project: https://wokwi.com/projects/390731361339855873
//
// Changed Uno to Mega board, white led is now on pin 2.
// Changed to 'currentMillis'
// Changed 'long' to 'unsigned long'
const int whiteLed = 2;
const int blueLed = 3;
unsigned long prevWhiteTimeMillis = 0;
boolean whiteState = false;
unsigned long prevBlueTimeMillis = 0;
boolean blueState = false;
int timer = 0;
int whiteLedBrightness = 0;
int whiteLedMaxBrightness = 50;
boolean whiteLedSwitch = false;
int blueLedBrightness = 0;
int blueLedMaxBrightness = 50;
boolean blueLedSwitch = false;
unsigned long currentMillis;
void setup() {
Serial.begin(115200);
pinMode(whiteLed, OUTPUT);
pinMode(blueLed, OUTPUT);
}
void loop() {
currentMillis = millis();
whiteLedControl();
blueLedControl();
Serial.print(whiteLedBrightness);
Serial.print(",");
Serial.print(blueLedBrightness);
Serial.println();
}
void whiteLedControl() {
if (currentMillis - prevWhiteTimeMillis >= 500 / 25) {
if (whiteLedBrightness >= whiteLedMaxBrightness) {
whiteLedSwitch = true;
}
if (whiteLedBrightness <= 1) {
whiteLedSwitch = false;
}
if (!whiteLedSwitch) {
if (whiteLedBrightness <= whiteLedMaxBrightness) {
whiteLedBrightness++;
} else {
whiteLedSwitch = true;
}
} else {
if (whiteLedBrightness >= 0) {
whiteLedBrightness--;
} else {
whiteLedSwitch = false;
}
}
prevWhiteTimeMillis = currentMillis;
}
analogWrite(whiteLed, whiteLedBrightness);
}
void blueLedControl() {
if (currentMillis - prevBlueTimeMillis >= 500 / 50) {
if (blueLedBrightness >= blueLedMaxBrightness) {
blueLedSwitch = true;
}
if (blueLedBrightness <= 1) {
blueLedSwitch = false;
}
if (!blueLedSwitch) {
if (blueLedBrightness <= blueLedMaxBrightness) {
blueLedBrightness++;
} else {
blueLedSwitch = true;
}
} else {
if (blueLedBrightness >= 0) {
blueLedBrightness--;
} else {
blueLedSwitch = false;
}
}
prevBlueTimeMillis = currentMillis;
}
analogWrite(blueLed, blueLedBrightness);
}