// https://forum.arduino.cc/t/combine-two-different-programs-and-switch-functionalities-based-on-the-input-by-sharing-same-pins/1297173/14

byte relPin = 2, ledPin = 3;

unsigned long relMillis, ledMillis, relTime = 500, ledTime = 25;

int ledPWM = 0, ledStep = 5, ledDir = 1, oneTime;

void setup() {
  pinMode(relPin, OUTPUT);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  relays();
  leds();
}

void relays() {
  if (millis() - relMillis > relTime) {
    relMillis = millis();
    digitalWrite(relPin, !digitalRead(relPin));
  }
}

void leds() {
  if (millis() - ledMillis > ledTime) {
    ledMillis = millis();
    ledPWM += ledStep * ledDir;
    if (ledPWM >= 255 - ledStep || ledPWM < ledStep)
      ledDir = -ledDir;
    analogWrite(ledPin, ledPWM);
    printPWM(ledPWM);
  }
}

void printPWM(int pwm) {
  if (!oneTime) {
    Serial.begin(115200);
    oneTime = 1;
  }
  for (int i = 0; i < pwm / 10; i++)
    Serial.print(" ");
  Serial.print("* ");
  Serial.println(pwm);
}
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module