Boucle finie dans le temps

Bonjour à tous!

Je rencontre quelques programmes de programmation, je suis débutante en arduino et je cherche à faire une boucle qui dure un certain temps. Cependant je ne souhaite pas utiliser la fonction delay car je cherche à acquérir des valeurs (de façon régulière donc ici je peux utiliser un delay) pendant le temps de la boucle que je souhaite faire. Je pourrai utiliser un delay et réécrire mes lignes d'acquisition mais mon programme serait pas mal lourd et je souhaite éviter cela...
Y a t il quelqu'un pour m'aider s'il vous plaît ??
Merci d'avance!

bonjour,
on parle assez de la fonction millis() dans ce genre de chose sur le forum :wink:

Bonjour et joyeux Noël

Regardez dans les exemples fournis en standard dans l'IDE celui qui s'appelle "Blink without delay"
Ne pas oublier la résistance de limitation de courant si vous utilisez une LED externe

/*
   Code d'exemple tiré de "Blink Without delay".
   Fait clignoter la LED intégrée sur la carte ( la pin D13 le plus souvent)
*/

// Déclare la pin sur laquelle est câblée la LED
const byte ledPin = LED_BUILTIN; // pin 13 le plus souvent

// Nombre de millisecondes à attendre pour changer l'état de la LED (demi période) 
const unsigned long demiPeriode = 1000ul; // ul pour bien spécifier unsigned long, une bonne habitude à prendre même si pas utile ici

//  valeur Précédente de millis() = temps quand on a fait la dernière action
unsigned long previousMillis = 0ul;

//  état courant de la LED
byte etatLed = LOW; // on commencera LED éteinte

//-------------------------------
void setup() {

  // Configure la broche de la LED en sortie
  pinMode(ledPin, OUTPUT);
  
  // Configure l'état initial de la LED
  digitalWrite(ledPin, etatLed);
}

// ----------------------------------------------
void loop() {

  // on lit la valeur actuelle de millis()
  unsigned long currentMillis = millis();
  
  // Si au moins demiPeriode millisecondes se sont écoulées
  // important de l'écrire comme cela pour gérer l'overflow sur le unsigned long au bout de 
  // 4,294,967,295 millisecondes (environ 49 jours)

  if( currentMillis - previousMillis >= demiPeriode) {
    // on se souvient du moment courant quand on a fait la dernière action 
    previousMillis = currentMillis; // on voit aussi previousMillis += demiPeriode; qui permet vraiment de rester calé sur cette demi période si d'aventure de temps en temps la loop() prenait trop longtemps
    
    // on Inverse l'état de la LED
    if (etatLed == LOW) etatLed = HIGH; else etatLed = LOW; // ou moins propre on peut écrire etatLed = !etatLed;
    digitalWrite(ledPin, etatLed); // on met à jour la led
  }

// ici vous pouvez faire autre chose du moment que ça prends moins longtemps que demiPeriode
// de façon à vous assurer de revenir en haut de boucle pour tester si c'est le moment de faire clignoter la LED


}