[prog]probleme de boucle et/ou de variable

Bonjour a tous Voila mon soucis. Après avoir lu et regardé plein de tuto, de conseils et autres videos, je n'arrive pas à faire fonctionner mon chronomètre à led correctement, et j'aurais besoin de quelqu'un qui me mette sur la bonne piste de recherche. C'est au niveau du loops que je me plante, enfin je crois. lorsque je programme cela, ca fonctionne correctement :

void loop() {
  LAPS = millis() - LAPS;
  nbaffiche = LAPS/50;
  afficher_nombre(nbaffiche);
}

résultat en vidéo : https://www.youtube.com/watch?v=fJODkQ6ySms Mais dés que je veux implanter un start stop et reset, mon afficheur "bug"

void loop() {
  byte message[VW_MAX_MESSAGE_LEN];
  byte taille_message = VW_MAX_MESSAGE_LEN;
  // On attend de recevoir un message
  vw_wait_rx_max(1);
if (vw_get_message(message, &taille_message)) {
    if (strcmp((char*) message, CMD_BP_START) == 0) {
      digitalWrite(led_1, !digitalRead(led_1));
memoire_start=1; memoire_stop=0;
    } else if (strcmp((char*) message, CMD_BP_STOP) == 0) {
      digitalWrite(led_2, !digitalRead(led_2));
memoire_start=0; memoire_stop=1;
    } else if (strcmp((char*) message, CMD_ULTRASON_START) == 0) {
      digitalWrite(led_3, !digitalRead(led_3));
memoire_start=1; memoire_stop=0;
    }
  }
if(memoire_start == 1)
  {
  LAPS = millis() - LAPS;
  nbaffiche = LAPS/50;
  afficher_nombre(nbaffiche);
  }
}

le bug en vidéo :https://www.youtube.com/watch?v=YEcslTNEoVs

ma question est du coup simple, comment dois je mis prendre? Merci d'avance pour vos conseils.

wahoo !!!! y'a de l'aide sur ce forum spécial arduino .... bon vu le nombre de réponse affolante et le nombre d'essai proposé, je vais continuer mes essais et vous en faire part, parce que oui, meme si ça à l'air simple et pas très intéressant ben c'est compliqué pour un noob ^^ donc j'ai modifié mon programme en ceci :

void loop() {
//test
unsigned long currentmillis = millis();
//reception message
  byte message[VW_MAX_MESSAGE_LEN];
  byte taille_message = VW_MAX_MESSAGE_LEN;
  // On attend de recevoir un message
  vw_wait_rx_max(1);

if (vw_get_message(message, &taille_message)) 
{
    if (strcmp((char*) message, CMD_BP_START) == 0) {
      digitalWrite(led_1, !digitalRead(led_1));
running = !running;
    } else if (strcmp((char*) message, CMD_BP_STOP) == 0) {
      digitalWrite(led_2, !digitalRead(led_2));
compteur = 0;
    } else if (strcmp((char*) message, CMD_ULTRASON_START) == 0) {
      digitalWrite(led_3, !digitalRead(led_3));
running = !running;
    }
}

if(running)
{
  if (currentmillis - previousmillis >= intervalmillis) {
    // save the last time you blinked the LED
    previousmillis = currentmillis;
    // if the LED is off turn it on and vice-versa:
compteur = compteur + 1;
    }
    // set the LED with the ledState of the variable:
    afficher_nombre(compteur);
}

//fin du loops
}

et là ça à l'air de fonctionner... ça en à que l'air car si je rajoute :

else
{
  afficher_nombre(compteur);
}

pour laisser le chrono après un stop sur la valeur, ben cela ne m'affiche plus que le dernier segment... bref, problème toujours pas résolu

et ici la vidéo : https://youtu.be/0Eq77uOXHwQ

bonjour,
avant de faire des réflexions déplacées, il serait bon que tu lise CECI
et comprendre ceci

Donnez le maximum de renseignements :

Le système d’exploitation et sa version.
La version de l’IDE.
Le code, bien évidement entre balises code (icône de gauche </>) .
Ce n’est pas pour vous embêter, c’est indispensable pour conserver la mise en forme du programme.
** Une description du matériel et des liens vers les documents techniques (datasheets).**
Bien évidement, ne présentez jamais de code sans avoir tenté de le compiler.
Si votre code ne compile pas, recopiez toutes les informations d’erreur délivrées par le compilateur.

Si l’on vous demande « beaucoup de renseignements qui semblent ne servir à rien », ce n’est pas de la curiosité mal placée. C’est que souvent, le diable se cache dans des endroits où on ne l’attend pas.

bonjour et merci pour cette première réponse mais il vrai aussi que ma réflexion "déplacée" a permis d'avoir une réponse, et j'en présente mes excuses. donc voici la liste du hard :

un afficheur de 4 digit à 7 segments à anode commune alimenté sous 12v voici une photo : |500x375

récepteur/afficheur

  • 1 uln2803 pour pnp/npn des digits
  • 1 uln2803 pour commande des masses des segments
  • 1 décodeur bcd MC14511BCP
  • 1 récepteur 433mhz
  • 1 arduino uno

voici une photo : |500x375

émetteur

  • 1 bp start/stop
  • 1 bp raz
  • 1 ultrason start/stop
  • 1 émetteur433mhz
  • 1 arduino uno

voici la photo : |500x375

et enfin ma p'tite tête heu non, vous allez faire des cauchemards ^^

Alors, bien que je ne comprenne toujours pas mon soucis, j’y ai pallié en utilisant des compteurs et ca fonctionne.
Bien que pas satisfait de ne pas avoir eu réponse et de n’avoir toujours pas compris pourquoi ca me faisait ca, le projet évolue et je vous en remercie, enfin je me remercie plutôt ca change XD

void loop() {
unsigned long currentmillis = millis();

//reception message
  byte message[VW_MAX_MESSAGE_LEN];
  byte taille_message = VW_MAX_MESSAGE_LEN;

// On attend de recevoir un message
  vw_wait_rx_max(1);

//on traite le message
if (vw_get_message(message, &taille_message)) 
{
    if (strcmp((char*) message, CMD_BP_START) == 0) {
running = false;
    } else if (strcmp((char*) message, CMD_BP_STOP) == 0) {
compteur = 0;dixieme = 0;seconde =0;dizaine = 0;dizaine = 0;
    } else if (strcmp((char*) message, CMD_ULTRASON_START) == 0) {
running = true;
    }
}
if(compteur>5999){running = !running;}
if(running)
{
  if (currentmillis - previousmillis >= intervalmillis) {
    previousmillis = currentmillis;
compteur = compteur +1;
dixieme = dixieme + 1;
if(dixieme>9){
  seconde = seconde +1;
  dixieme = 0;
}
if(seconde>9){
  dizaine = dizaine+1;
  seconde =0;
}
if(dizaine>5){
  minute = minute+1;
  dizaine = 0;
}
    }
    unsigned long temps;
    temps = millis(); // on récupère le temps courant

    // tant qu'on a pas affiché ce chiffre pendant au moins 100 millisecondes
    // permet donc de pouvoir lire le nombre affiché
    while((millis()-temps) < 100)
    {
        digitalWrite(alim_seg_4, HIGH);
        digitalWrite(alim_seg_3, LOW);
        digitalWrite(alim_seg_2, LOW);
        digitalWrite(alim_seg_1, LOW);
        afficher_chiffre(minute);
    delay(duree);
        digitalWrite(alim_seg_4, LOW);
        digitalWrite(alim_seg_3, HIGH);
        digitalWrite(alim_seg_2, LOW);
        digitalWrite(alim_seg_1, LOW);
        afficher_chiffre(dizaine);
    delay(duree);
        digitalWrite(alim_seg_4, LOW);
        digitalWrite(alim_seg_3, LOW);
        digitalWrite(alim_seg_2, HIGH);
        digitalWrite(alim_seg_1, LOW);
        afficher_chiffre(seconde);
    delay(duree);
        digitalWrite(alim_seg_4, LOW);
        digitalWrite(alim_seg_3, LOW);
        digitalWrite(alim_seg_2, LOW);
        digitalWrite(alim_seg_1, HIGH);
        afficher_chiffre(dixieme);
    delay(duree);
    }
}
if(!running)
{
  afficher_nombre(compteur); //affiche le temps fixe sur l'afficheur
}
//fin du loops
}