Partage de donées entre loop and routine d'interruption

Bonjour
J’utilise pour la première fois les interruptions et j’ai quelques difficultés de mise au point.

La routine d’interruption ISR réalise l’identification d’une voiture de circuit électrique digital (par lecture du signal émis en permanence par la voiture) = c’est OK cela fonctionne et enregistre le temps via millis() lors du franchissement de la ligne =ça fonctionne également.
Dans la boucle principale je voudrai lire ces données (l’identifiant voiture est un int et le temps intermédiaire un unsigned long) pour réaliser différentes fonctions comme chronométrage, position de la voiture en course…
Je n’arrive pas à lire ces données alors qu’elles sont correctement affichées à la sortie de l’ISR.

Ma question est donc comment partager ces données entre l’ISR et loop()?

J’en appelle à votre expérience.
J’ai joins un extrait du code ISR au cas où…
Merci.

Raoul.

// ISR pour l'interruption 0  = readPulse0() >>>>> DETECTEUR 1 (sur ligne d'arrivée)
 void readPulse0()
  {
  newduree=pulseIn(7,LOW,timeOut);  
  if (newduree >= 10 && newduree <= 400){
    if (newduree > duree){
      duree=newduree;
    }
    NP++;
  }
  else
  {
    NP=0;
  }
  if (duree >= 10 && NP == 0) {
     for (int v = 0; v <= maxCar-1; v++) {
      if (duree >=  race[v].pulseID && duree <= race[v+1].pulseID) {
        carID1=v;
        intTime1=millis();
        if ((intTime1 - race[v].intTime) > 3000) { // le temps de passage est valide (sinon il s'agit du même passage sur le même détecteur)
          race[v].intTime=intTime1;
        }
        Serial.print("\n");
        Serial.print("D1=");
        Serial.print(duree);
        Serial.print("  Car=");
        Serial.print(carID1);
        Serial.print("  intTime1=");
        Serial.print(intTime1);
        Serial.print("\n");
        duree=0;
        break;
      }
    }
  } 
  int0 = true; // indique l'éxecution de l'ISR
  }

Salut,

les valeurs que tu souhaites lire sont bien race[v].intTime ? Pour être accessible de partout, les variables doivent-être globales (déclaré en tête du sketch)

Enfin, sans le sketch complet, ce n'est pas évident de t'aider...

Gromain

les variables doivent-être globales (déclaré en tête du sketch)

et déclarée volatile

Merci pour vos réponses. Cela fonctionne maintenant en déclarant les variables volatile. RR