Faire une boucle qui se répète un temps prédéfini

Bonjour à tous,
Je suis novice en programmation pour Arduino :smiley: et j'aimerais savoir comment faire une boucle qui se répète par exemple 5 secondes et qui ne se répète plus par la suite. J'avais pensé à utiliser millis() mais après plusieurs essais, j'ai abandonné :confused:
Pouvez-vous m'aider à trouver une solution pour ce petit problème de boucle?

Merci d'avance :wink:

Bonjour,
C'est effectivement la fonction millis qu'il faut utiliser pour arriver au resultat que tu cherches.
Postes ici ton code (entre balises codes) qui ne fonctionne pas et on t'aidera a solutionner ton probleme.

Jacques

voila le code http://puu.sh/iWqIF/70614c1b07.png

merci pour ta réponse rapide :slight_smile:

Voir le "mode d'emploi" du site

hello,je pense que tu n’as pas trouvé comment poster ton prg

n’attends pas d’en avoir besoin pour regarder comment fonctionne le forum

je suis allé voir l’image de ton code et en en respectant “l’esprit” ca donne le code qui suit

c’est la led 13 qui clignote sur la platine UNO
tu peux aussi voir ce qui se passe sur ton moniteur en 57600 bauds

int led = 13;
unsigned long tps = 0;
unsigned long temps_courant = 0;
unsigned temps_precedent = 0;
boolean etat_led = true;

void setup()
{
  Serial.begin(57600);
  pinMode(led, OUTPUT);
  digitalWrite(led, etat_led);
  tps = millis();
  Serial.print(" tps =  "); Serial.println( tps);
  temps_precedent = tps;
  while ((millis() - tps) < 5000)
  {
    
    if ((millis() - temps_precedent) > 1000)
    { Serial.print("milli - temps precedent =  "); Serial.println((millis() - temps_precedent));
      temps_precedent = millis();
      etat_led = !etat_led;
      digitalWrite(led, etat_led);
      Serial.print("etat_led =  "); Serial.println( etat_led);
    }
  }
}

void loop()
{

  while(1){}
}

Il suffit de comparer la valeur de millis() à laquelle on soustrait une valeur précédente.

Exemple:

void setup()
{
  Serial.begin( 9600 );
}

void loop()
{
  uint32_t currentTime = millis();
  static uint32_t previousTime = currentTime;
  
  if ( currentTime - previousTime <= 5000 )
  {
    Serial.println( currentTime );
  }
}

Quand tu veux répéter cette “boucle”, il suffit d’assigner la valeur de currentTime à previousTime:

previousTime = currentTime;

Exemple pour exécuter du code pendant 5 secondes, toutes les 10 secondes:

void setup()
{
  Serial.begin( 9600 );
}

void loop()
{
  uint32_t currentTime = millis();
  static uint32_t previousTime = currentTime;
  
  uint32_t deltaTime = currentTime - previousTime;

  if ( deltaTime <= 5000 )
  {
    Serial.println( currentTime );
  }
  else if ( deltaTime >= 10000 )
  {
    previousTime = currentTime;
  }
}