problème de délai

Bonsoir,
Je voudrai allumer des led après un temps au "hasard",pendant 5 sec , puis si cela s'est fait, recommencer,
mais à partir du moment zero, il faudrait que les leds s'allume après un temps que j’appelle 'na' .
Pour cela j'essaie d'utiliser la fonction milli, mais avec mon code, à chaque tour de loop, on dirai que la valeur de 'na' change ...., je voudrais que 'na' reste à la même valeur jusque l'allumage des leds se soit produit effectivement, ,alors là,et seulement là, la valeur de na doit changer ( au hasard ) pour recommencer un cycle.
Merci de votre aide
voici le code que j'ai pu faire :

// definitions des variables
  unsigned long na ;
  unsigned long currentMillis = millis();
  int analogPin=0;
  int analogValue=0;
  int ledPin1=7;
  int ledPin2=2;
  int ledPin3=3;

void setup()
{
    Serial.begin(9600);  
    pinMode(ledPin1,OUTPUT);
    pinMode(ledPin2,OUTPUT);
    pinMode(ledPin3,OUTPUT);
  
}
void loop()
{
    unsigned long na = random(6000,10000); 
    Serial.println(na);
    analogValue=analogRead(analogPin);
    Serial.println(analogValue);
     
   if (analogValue>300 &&   currentMillis == na) {                                                                
    digitalWrite(ledPin1,HIGH);
    digitalWrite(ledPin2,HIGH);
    digitalWrite(ledPin3,HIGH);
    delay (5000);                                                                      
  }
 else 
 {digitalWrite(ledPin1,LOW);
 digitalWrite(ledPin2,LOW);
 digitalWrite(ledPin3,LOW);
 }
                                                                                     
    currentMillis = millis();
    
    }

À chaque fois que la loop se lance, elle toute une nouvelle valeur pour na, ce que tu vois est donc normal.

Pour obtenir ce que tu veux, il faut que l'attente se fasse au sein d'une seule exécution de la loop.

Si ton code ne doit rien faire d'autre, le plus simple est de faire delay(na). Mais je vois que tu lis aussi une pin analogique.

Donc il faut changer de stratégie. Tu prends un booléen qui gère l'attente. Si ce booléen est à true, par exemple, tu ne tires pas la nouvelle valeur aléatoire de na.
À la fin de l'attente, tu passes le booléen à false. Au passage, ton test n'est pas bon, il vaut mieux comparer si millis est supérieur à na au lieu de égal.

Dans la loop, si le booléen est false, tu toutes une valeur aléatoire et tu le passes à true.

Désolé c'est un peu brouillon, mais ça devrait marcher.

Merci,
Je corrige pour " il vaut mieux comparer si millis est supérieur à na au lieu de égal. "
Pour le booléen, je comprends le système, mais je je vois pas trop comment m'y prendre pour l'insérer dans le code.

Peut-être comme ceci :

// definitions des variables
unsigned int na ;
int analogPin = 0;
int analogValue = 0;
int ledPin1 = 7;
int ledPin2 = 2;
int ledPin3 = 3;
bool attente = false;

void setup() {
  Serial.begin(9600);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
}
void loop() {
  if (!attente) {
    na = random(6000, 10000);
    Serial.println(na);
    attente = true;
  }
  analogValue = analogRead(analogPin);
  Serial.println(analogValue);

  if (analogValue > 300 && millis() > na) {
    attente = false;
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(ledPin3, HIGH);
    delay (5000);
  } else { 
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
  }
}

J'ai aussi passé la variable na en global et en int puisqu'elle ne dépasse pas 10000.