J'ai mis "etat" à la place de "numPin",mais le résultat est le mème,
qui va donc bien dire à maSequence.etat d'être LOW ou HIGH ? , c'est le fait qu'il passe en dessous des 11 cms ( donc représenté ici par t0 >= maSequence.debut) ; et la fin , c'est que le temps d'allumage est passé t0 > maSequence_.fin ) && que digitalWrite(maSequence*.etat, HIGH)ou (LOW) , mais ça veut pas; je dois rater quelque chose dans la logique du système !
```*_
*struct elementSequence_t {
byte numPin;
unsigned long debut;
unsigned long fin;
byte etat;
};
elementSequence_t maSequence[] = { // Initialiser la structure elementSequence_t avec les variables maSequence[]
{11, 0ul, 500ul, LOW},
{6, 500ul, 8500ul, LOW},
{13, 500ul, 6500ul, LOW},
{10, 8500ul, 38500ul, LOW},
{9, 8500ul, 18500ul, LOW},
{7, 18500ul, 26500ul, LOW},
{6, 38500ul, 46500ul, LOW},
{12, 46500ul, 56500ul, LOW},
{3, 56500ul, 62500ul, LOW},
{7, 56500ul, 64500ul, LOW},
{8, 64500ul, 84500ul, LOW}
};
const byte nbElementSequence = sizeof(maSequence) / sizeof(maSequence[0]);
unsigned long topDistanceCritique;
void setup() {
Serial.begin(115200);
topDistanceCritique = 2300ul; // on simule que l'on est passé sous 11cm à ce moment là
for (byte i = 0; i < nbElementSequence; i++) {
pinMode(maSequence[i].numPin, OUTPUT);
digitalWrite(maSequence[i].numPin, maSequence[i].etat);
}
}
void loop()
{
unsigned long t0 = millis() - topDistanceCritique;
for (byte i = 0; i < nbElementSequence; i++) {
if (maSequence[i].etat == LOW) {
// on regarde s'il faut l'allumer
if ((t0 >= maSequence[i].debut) && (t0 <= maSequence[i].fin)) {
// FAIRE DES TRUCS
digitalWrite(maSequence[i].etat, HIGH); //<-------------
}
} else {
// on est HIGH on regarde s'il faut éteindre, c'est uniquement après la fin
if ((t0 > maSequence[i].fin)) {
// FAIRE DES TRUCS
digitalWrite(maSequence[i].etat, LOW); //<----------------
}
}
} // end for
}
_```*
Merci
Frida_
