probléme avec la boucle while

Bonsoir,
Essayant de faire un programme contenant la boucle while,celle ci ne fait pas ce que je veux.
la variable est la lecture d'un bouton , 0 si enfoncé, 1 si appuyé .
Avec digitalRead, j'ai constaté que la valeur passait bien de 0 à1 , mais elle ne sort pas de la boucle infinie.
Alors que si j'appuie sur le bouton dès le départ , elle lit bien 1 et ne rentre pas dans la boucle; mais si je relâche, alors le 0 est lu, ça rentre dans la boucle, mais impossible d'en sortir ( malgré que j'enfonce le bouton , ça lit bien 1 , mais ça reste dans la boucle )
Où ai-je fait une erreur ?
Merci

// Constantes
// les relais
const int relais1 = 2;
const int relais2 = 4;
const int relais3 = 7;
const int relais4 = 8;
const int relais6 = 11;
const int relais5 = 12;
const int boutonBas = 9;
const int boutonHaut = 10;

// variable qui enregistre l'état du bouton
int etatBoutonBas;

int L = analogRead(A0);
int N = 100;
int J = 400;
unsigned long T = 1500;
int LN1 = 5;
int LN2 = 6;
int LN3 = 7;
int LJ1 = 915;
int LJ2 = 916;
int LJ3 = 917;

void setup() {
  Serial.begin(115200);

  //declaration des pins pour les relais en sortie=

  pinMode (relais1, OUTPUT);
  pinMode (relais2, OUTPUT);
  pinMode (relais3, OUTPUT);
  pinMode (relais4, OUTPUT);
  pinMode (relais5, OUTPUT);
  //declaration de la pin pour la photoresistance en entrée=
  pinMode (A0, INPUT);
  pinMode(boutonBas, INPUT_PULLUP);

  etatBoutonBas = HIGH; // on initialise l'état du bouton comme "relaché"
}

void loop() {
  digitalWrite(relais1, HIGH);
  digitalWrite(relais2,  HIGH);
  digitalWrite(relais3, HIGH);
  digitalWrite(relais4,  HIGH);
  digitalWrite(relais5,  LOW);

  Serial.println(" 111111111111111111111111111111111 DEBUT");
  L = analogRead(A0);
  Serial.println(L);

  if (L < N) {
    Serial.println("  N 1");
    L == LN1;
    delay (T);
    Serial.print("Analog reading = ");
  }
  L = analogRead(A0);
  Serial.println(L);

  if (L < N) {
    Serial.println("  N 2");
    L = LN2;
    delay (T);
    Serial.print("Analog reading = ");
  }
  L = analogRead(A0);
  Serial.println(L);

  if (L < N) {
    L == LN3;
    delay (T);
    L == LN3 ;
    digitalRead(9);
    Serial.println ( digitalRead(9));
    Serial.println("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv");
    digitalWrite(relais3,  HIGH);
    digitalWrite(relais4,  HIGH);
    digitalWrite(relais1,  LOW);
    digitalWrite(relais2,  LOW);
    delay (1500);
    digitalWrite(relais1,  HIGH);
    digitalWrite(relais2,  HIGH);
    digitalWrite(relais5,  HIGH);  // allumé
    delay (500);
    digitalWrite(relais5,  LOW);  // éteint
    
    etatBoutonBas = digitalRead(boutonBas); // Rappel : boutonBas = 9  PERMET DE SAVOIR SI OUI OU NON ON EST EN BAS
    digitalRead(boutonBas);
    Serial.println ( digitalRead(9));
    Serial.println("00000000000000000000000 ");
    while ( etatBoutonBas == 0 )  {
      Serial.println("ZZZZZZZZZZZZZZZ ");
      digitalWrite(relais3,  LOW);       // PORTE DESCENT         LOW  == ALLUMER
      digitalWrite(relais4,  LOW);        // PORTE DESCENT      LOW  == ALLUMER
      digitalRead(etatBoutonBas);
      Serial.println ( digitalRead(9));
      Serial.println(" BOUTON ETEINT");
    }
    digitalRead(boutonBas);
    Serial.println ( digitalRead(9));
    Serial.println ( "kkkkkkkkkkkkkkkkkkkkk");
  }
}

passage de 0 à 1 sans effet.PNG

bouton enfoncé dès la mise en route.PNG

passage de 0 à 1 sans effet.PNG

bouton enfoncé dès la mise en route.PNG

Monsieur le modérateur,
je me suis trompé d'endroit pour ce post,pouvez vous corrigé
Merci, et mille excuses

déplacé

 L == LN3;

cette ligne n’a aucun effet. Ell compare L et LN3, et puis … rien de plus. Le résultat de la comparaison est inutilisé. La variable L n’est pas modifiée.

digitalRead(9);

Cette ligne n’a aucun effet. La pin 9 est lue, le résultat est aussitôt oublié.

Relis ton code attentivement