Simplification de code avec la fonction modulo

Bonsoir,

voilà j'aimerais intégrer dans mon sketch une fonction qui ferait varier le rapport cyclique du clignotement d'une led

j'ai tripatouiller à ma sauce le code de blink avec Millis()

qui fonctionne et qui fait ce que je veux

// Led clignotant  avec rapport cyclique reglable

const int ledpin = 13;   // n° de la Led  de la carte
const int constante_temps = 1500; // rapport de clignotement , constante_temps = Led low,  constante_temps =hight
const int long_Cycle_temps = 3000; //  longueur du cycle de clignotement

//  ici un cycle de 3000 ms avec 1500ms d'extinction

unsigned long mtempsAllumage = 0; // mémorisation du temps  d'allumage
unsigned long mtempsEteint = 0; // mémorisation du temps  d’extinction 

void setup() {

  pinMode(ledpin, OUTPUT); // la broche "13" est une sortie
 

}

void loop() {
  // ne bloque pas le programme

  unsigned long temps = millis(); // lecture du temps système, utiliser une variable comme "temps" permet de l'utiliser pour d'autres action dans le programme


  if ( temps >= mtempsAllumage && Led) // si le temps d'allumage est écoulé et Led allumé
  {
    digitalWrite( ledpin , Led); // allume la led selon l'état du bit "Led"
    Led = !Led;     // inverse l'état de "Led"
    mtempsAllumage = mtempsAllumage + (long_Cycle_temps - constante_temps); // mémorise le temps + constante
    mtempsEteint = mtempsEteint + (long_Cycle_temps - constante_temps);
 
  }
  if ( temps >=  mtempsEteint  && !Led )  // si le temps d'extinction est écoulé et Led eteinte
  {
    digitalWrite( ledpin , Led); // allume la led selon l'état du bit "Led"
    Led = !Led;     // inverse l'état de "Led"
    mtempsEteint = mtempsEteint + constante_temps; // mémorise le temps +constante
    mtempsAllumage = mtempsAllumage + constante_temps;
 
  }
 
}

je voudrais savoir s'il est possible de simplifier ce code?
je pensais à la fonction "modulo" mais je ne vois pas comment l’intégrer .
merci de vos conseils

Il y a beaucoup de solutions, plus ou moins efficaces. Moi je te propose ça (pas testé) : un cycle de 3 secondes, dont 1 seconde allumée.

unsigned long chrono;
const int ledpin = 13;
const unsigned long tempsON = 1000ul;
const unsigned long tempsOFF = 3000ul;
bool ledState = HIGH;

void setup() {
  pinMode(ledpin, OUTPUT);
  digitalWrite (ledpin, ledState);
  chrono = millis();
}

void loop() {
  if (millis() - chrono > tempsON) ledState = LOW;
  if (millis() - chrono > tempsOFF) {
    ledState = HIGH;
    chrono = millis();
  }
  digitalWrite (ledpin, ledState);
}

Merci Lesept!!
ça marche très bien pour ce que je veux faire