Zeitsteurung mit millis

Du kannst dir mal anschauen, wie ich das bei meiner PWM gelöst hab.

  void runPwm() {
    unsigned long currentMillis = millis();
  
    if (nextMillis < currentMillis) {
      if (!pinActive && power > 0) {
        activatePin();
        nextMillis = currentMillis + calculateOnMillis();
      } else {
        deactivatePin();
        nextMillis = currentMillis + calculateOffMillis();
      }
    }
}

calculateOnMillis würde bei dir basierend auf dem BetriebszeitgeberPin die Einschaltzeit zurückgeben.
calculateOffMillis würde bei dir basierend auf dem PausenGeberPin die Pausenzeit zurückgeben.
power > 0 musst du noch rausschmeißen, das ist für dich uninteressant.