// 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);
}