tempo multiples sans utiliser delay

bonjour et merci de me lire
mon probleme:
je souhaite generer 5 variables ou commander 5 sorties dans un ordre precis
mise high d'un inter (mise en service)
au temps zero = v1 high pendant 1 minute ensuite v2 high 1 minute puis v3 high 1 minute, v4 high 1 minute, v5 high 1 minute et on recommence jusqu'a la mise low de l'inter
quelqu'un a t'il un bout de code ??
merci a tous

Renseignes toi sur millis

je ne suis que débutant,
mais je verais quelque chose de comme sa

long temps = millis();

if(temps >= 60000)
{
  
  // et là, la fonction
temps = 0;
}

à inclure et a essayer

Ton code n'entrera dans la boucle 60s aprés le démarrage de l'arduino.

Si tu veux attendre ça donne plutôt :

long temps = millis();
if(temps >= temps + 6000)   // 6s
{

}
else if( temps >= temps + 8000 ) // 8s
{
}

Bonjour les copains,
Le sujet a déjà été abordé, mais je n'arrive pas à retrouver le lien.
Je peux te proposer trois programmes qui ici m'ont servi comprendre les divers moyens de gérer le temps avec le langage C d'Arduino. Ils ont l'avantage de fonctionner. Tu pourras les télécharger, voir ce qu’il font, puis, décortiquer les instructions pour adapter à tes besoins.
Programme 1

/* Programme pour la gestion du temps sur Arduino sans utiliser dealay(). */

#define LED 13
#define TEMOIN_de_boucle 8
#define DELAI 1000
#define TEMPO_courte 100

// Variables globales.
boolean Etat_LED = false, Bascule_de_boucle = false;
long Ancienne_Horloge = 0 , Ancien_temoin = 0;
unsigned long Horloge_actuelle;

void setup() {pinMode(LED, OUTPUT); pinMode(TEMOIN_de_boucle, OUTPUT); }

void loop() {
  Horloge_actuelle = millis();

  if(Horloge_actuelle - Ancien_temoin > TEMPO_courte)
    {Bascule_de_boucle = 1 - Bascule_de_boucle; Ancien_temoin = Horloge_actuelle;}
  digitalWrite(TEMOIN_de_boucle, Bascule_de_boucle);  
  
  if(Horloge_actuelle - Ancienne_Horloge > DELAI)
    {Etat_LED = 1 - Etat_LED; Ancienne_Horloge = Horloge_actuelle;}
  digitalWrite(LED, Etat_LED); }

Programme 2

/* Programme pour tester la génération du temps sur Arduino.
   ATTENTION : Toute réactivation de la ligne série USB provoque un redémarrage, donc
   la perte de la valeur du Timer 0 qui est remis à zéro. */

// Variables globales.
unsigned long HORLOGE_SYSTEME;

void setup(){ Serial.begin(115200); }
void loop(){
  Serial.print("Temps "); Serial.print(char(233));
  Serial.print("coul"); Serial.print(char(233)); Serial.print(" : ");
  HORLOGE_SYSTEME = millis();
  // Affiche sur la ligne série USB le temps écoulé depuis le redémarrage du programme.
  Serial.println(HORLOGE_SYSTEME/1000); delay(1000); // Un affichage par seconde.
}
   
//  INFINI: goto INFINI; }

Programme 3

#define TEMPO 600 // Dix minutes = 600 secondes.
// Variables globales.
unsigned long DUREE_ECOULEE, TOP_CHRONO;

void setup(){ Serial.begin(115200); TOP_CHRONO = millis()/1000;}

void loop(){
  Traiter_toutes_les_dix_minutes(); }
   
void Traiter_toutes_les_dix_minutes() {
 DUREE_ECOULEE = (millis()/1000) - TOP_CHRONO;
 if (DUREE_ECOULEE == TEMPO)
    { Serial.print("Heure systeme = "); Serial.println(millis()/1000);
      TOP_CHRONO = millis()/1000;} }

Je n’ai pas le temps actuellement de créer du code pour ton problème spécifique, mais ce qui précède devrait t’aider.
Amicalement : Nulentout.

exact j'ai deja tester sur delay mais effectivement si je fait vos applic je n'obtiens pas le but rechercé
mon apli doit donc sequencer mes sortie un peut comme un cheniillard
v1 immediat pendant 1mn puis v2 pendant 1mn etc arrivé a la fin de la minute de v5 on repart sur v1 et
en gros v1 1mn high puis 4mn low etc n'y a t'il pas une possibilite de code qui une fois v1 lancé demmare v2 sur le front decendant etc
mois aussi je debute

bonjour
suite a un precedent post je modifie ma demande
je souhaite un genre de clignotant et je bute sur divers codes que l'on m'a posté.
une led doit etre alumée 1Mn et eteinte pendant 4Mn puis le cycle recommence.
merci si quelqu'un a un bout de code, sans utilisation de Delay()

Je ne l'ai jamais fait mais je l'ai lu et je pense que cela peut fonctionner.

Si tu as une horloge sauvegardée (RTC) qui délivre un signal à 1 Hz tu peux t'en servir comme horloge extérieure au Timer 2 (c'est le seul qui accepte une horloge extérieure).
Avec un timer 8 bit tu compter jusqu'a 256 * 1 seconde soit 16 seconde de marge pour faire 4mn.
C'est tout ce que j'ai en rayon.

bon c'est vraiment a la grosse mais j'ai pas tester!

#define nb_inter 6
byte i=0;
int temp=0;
int tempo=600;//pour 6s
void setup(){
for (i=0,i<nb_inter,i++){
pinmode(i+x,output);//x etant la sortie a la quel tu met l'inter 1}
void loop(){
digitalwrite(i,HIGH);
if ( millis()>=temp+tempo){
digitalWrite( i,LOW);
temp=millis();
i++;
if(i>=nb_inter){i=0;
}
}

J'ai fait une classe là dessus. Tu peut juste corriger en fonction de ce qu'on m'a indiqué dans le post.

http://forum.arduino.cc/index.php?topic=241441.msg1731713#msg1731713

Il suffit de regarder les exemples qui sont installés avec l'IDE arduino. Il y a un programme qui s'appelle BlinkWithoutDelay qui fait ce que tu veux

merci a tous
toutes les astuces donnees sont le bienvenue
mais pour moi elle donnent toute le meme resultat
la duree HIGH de la led est toujour identique a la duree LOW seule les duree changent
mon besoin je le rappelle est HIGH 1 minute - LOW 5 minutes
mon test
fonctionne 1 cycle
au deuxieme la led reste HIGH

#define TEMPO 360 // 5 minutes = 360 secondes.
unsigned long DUREE_ECOULEE, TOP_CHRONO;
boolean etat_led;
unsigned long temps; 
byte et_led1=0;
byte top=0;
int led=11;

void setup(){
     pinMode(led, OUTPUT);
     etat_led = 1;
     digitalWrite(led, etat_led);
     TOP_CHRONO = millis()/1000;
}

  void loop(){
      et_led1=digitalRead(led);
      
      if(top==LOW){
  Traiter_une_minute();
  }
   if(top==HIGH){
   Traiter_cinq_minutes(); 
   }
           }//fin loop
           
       void Traiter_une_minute() { 
//              if(et_led1==HIGH){ balise(); }
                if(millis()/1000 - temps > 60)
		{
  		etat_led = !etat_led; //on inverse l'état de la LED
		digitalWrite(led, etat_led); //on allume ou éteint
		temps = millis()/1000; //on stocke la nouvelle heure
                top=HIGH;
                delay(100);
		}
                }
//-------------------------------------------------------------------        
 
  void Traiter_cinq_minutes() {
          //      if(et_led1==HIGH){ balise();}
                DUREE_ECOULEE = (millis()/1000 - TOP_CHRONO);
                if (DUREE_ECOULEE == TEMPO){ 
                TOP_CHRONO = millis()/1000;
                delay(100);
                top=LOW;
                } 
                }

Voilà la boucle principale de BlinkWithoutDelay

  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }

Il suffit de changer interval dans les 2 branches du if

  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW){
      ledState = HIGH;
      interval = Temp_Low;
    }else{
      ledState = LOW;
      interval = Temp_High;
   }
    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }

A toi de définir les 2 valeurs de temporisation

merci fdufnews et aux autres
tu m'a bien avancé
cela a l"air de fonctionner, et en utilisant milli() je risque un overflow au bout de combien de temps ?
voici le code que j'ai entré

int ledPin=11; 
boolean ledState=0;
#define Temp_Low 60
#define Temp_High 240
int interval=0;
  unsigned long previousMillis;

void setup(){
     pinMode(ledPin, OUTPUT);
     ledState = 0;
}

  void loop(){
  unsigned long currentMillis = millis()/1000;
  if(currentMillis - previousMillis > interval) {
    // save the last time you blinked the LED 
    previousMillis = currentMillis;   

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW){
      ledState = HIGH;
      interval = Temp_Low;
    }else{
      ledState = LOW;
      interval = Temp_High;
   }
    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
  }

Avec millis le compteur du microcontrôleur recyclera tous les 49,71 jours.