Problèmes avec millis

Bonjours tous le monde,
je voudrais faire avec millis() un petit programme :
tant que millis est< 5mn en fait quelque chose
dés que millis >=5mn on fait une autre chose
quelqu'un pourrait m'aider svp merci

unsigned long t = millis()
if ( t < 5 * 60000L ) {
  // faire qque chose
} else {
 // faire autre chose
}

dans ce programme, le temps est compté à partir du démarrage de la carte.

@biggil merci pour la réponse rapide là il fait juste si <5 * 60000L fait quelque chose sinon autre chose
ce que je veux si t< 5*60000L il fait la 1ere chose il attend jusqu'à t=5 * 60000L il enchaine avec la deuxième chose. merci

C'est la même chose dite différemment.
Tant que t< 5*60000L on fait la 1ere chose
Quand la condition n'est plus remplie on fait la deuxième.
C'est ce que tu as demandé

Pas tout à fait.
Dans mon prog, la 1ere action est faite de façon répétitive, tant que t < 5mn
Notre ami veut faire UNE fois et UNE SEULE fois la 1ère action
Il lui suffit d'ajouter un flag

bool premiere_action_faite = false;
if ( condition &&  ! premiere_action_faite ) {
  // faire 1er action
  premiere_action_faite = true;
}

Edit : on est bien d'accord que pour faire à nouveau la 1ere action, il faut redémarrer la carte.

1 Like

@fdufnews oui si t< 560000L on fait la 1ére avec un chrono si le chrono dépasse ou égale 560000L on enchaine avec la 2éme et là dans cette exemple

unsigned long t = millis()
if ( t < 5 * 60000L ) {
  // faire qque chose
} else {
 // faire autre chose
}

il fait juste si t < 5 * 60000L fait la 1ere sinon fait la deuxieme

Merci de te relire avant de poster, je suppose que c'est "il faut juste"
Ce n'est pas suffisant comme spécification, cette phrase ne dit pas s'il faut faire les action 1 fois ou bien les faire en boucle.

@biggil je veux faire un truc automatique en une seule fois :

si t < 5 * 60000L on fait la première chose
on attend jusqu'à que t soit égale 5 * 60000L (t = 5 * 60000L)
on enchaîne avec la deuxième chose

C'est imprécis.
La première chose on la fait une fois ou on la répète tant que la condition reste vrai.

il dit "on attend jusqu'à que t soit égale 5mn"
donc c'est 1 seule fois la 1ere action

@biggil oui c'est ça j'ai avec un delay(); ça bloque tout le programme c'est pas faisable

Si vous ne voulez le faire qu'une seule fois mettez le à la fin de " setup " :

  unsigned long t = millis();
  while ((millis () - t) <= (5 * 60000L) ) {
    // je fais la première chose
  }

Ou si pendant ces 5 Mn. Les deux choses doivent être exécutées, vous pouvez utiliser la structure suivante :

//.......
//.......

void setup() {
  //.......
  //.......
  unsigned long t = millis();
  while ((millis () - t) <= (5 * 60000L) ) {
    // je fais la première chose
    deuxième_chose();
  }
}

void loop() {
  deuxième_chose();
}

void  deuxième_chose() {
  // je fais la deuxième chose
}

bin non, ça ça fait la 1ere action en boucle pendant 5 mn

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.