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
}