LED Traffic Light button not working Effectively

Hello, I currently have a project which has two sets of traffic lights attached one ‘south’ and ‘north’. The basic premise is one of the lights starts red, while the other switches between (Green,yellow,Red) and vice versa. I also have a walk and don’t walk light, where don’t walk(Red) is always on, except The button to make the user walk has to be pressed for several seconds after the correct sequence is displayed, how would i go about making the user only have to press the button initially(1 second) .

  int LedPINS [] = {10,9,8,7,6,5,4,3};
    boolean TLightRed = false;
    int button = 2, buttonState = 0;//button test
    
    void setup() {                
      // initialize the digital pin as an output.
      for (int i = 0; i < 8; i++ )
      {
        pinMode(LedPINS[i],OUTPUT); // loop through each LED Output
      }
    }
    
    void loop() {
     if(TLightRed == false|| TLightRed == true) { // if red traffic light is one or off
     digitalWrite(LedPINS[1],HIGH);//Turn on appropriate lights
     digitalWrite(LedPINS[7],HIGH);
     digitalWrite(LedPINS[2],HIGH);
     delay(2800);//delay
     digitalWrite(LedPINS[2],LOW);
     
     digitalWrite(LedPINS[3],HIGH);
     delay(1800);
     digitalWrite(LedPINS[3],LOW); //turn on appropriate lights
     
     digitalWrite(LedPINS[4],HIGH);
     digitalWrite(LedPINS[4],LOW);
     
       buttonState = digitalRead(button); // register button function
      if(buttonState == HIGH) // if button is pressed
      {
      if(digitalRead(LedPINS[5] == HIGH && digitalRead(LedPINS[4] == HIGH)))
       {
        digitalWrite(LedPINS[0],HIGH); // proceed with Turning on/off lights
        digitalWrite(LedPINS[1],LOW);
        digitalWrite(LedPINS[4],HIGH);
        digitalWrite(LedPINS[5],HIGH);
        digitalWrite(LedPINS[7],LOW);
        delay(7000); //delay
        digitalWrite(LedPINS[0],LOW);
        digitalWrite(LedPINS[1],HIGH);
        digitalWrite(LedPINS[4],LOW);
        digitalWrite(LedPINS[5],LOW);
         TLightRed = true; //return to beggining of loop
       }
      }
    
    if(digitalRead(LedPINS[4] == HIGH))
    { // othewise proceed here with regular loop
     digitalWrite(LedPINS[4],HIGH);
     digitalWrite(LedPINS[7],LOW);
      //turn on off lights
     digitalWrite(LedPINS[5],HIGH);
     delay(2800);
     digitalWrite(LedPINS[5],LOW);
     
     digitalWrite(LedPINS[6],HIGH);
     delay(1800);
     digitalWrite(LedPINS[6],LOW);
     
     digitalWrite(LedPINS[7],HIGH);
     digitalWrite(LedPINS[7],LOW);
    }
    
    if(digitalRead(LedPINS[7] == HIGH)) //switch between each traffic light
     {
     digitalWrite(LedPINS[7],HIGH);
     digitalWrite(LedPINS[4],LOW);
     TLightRed = true; //return to loop beggining
     }
     
    }
   }

Traffic lights? Have you tried the search box in the top right corner of the screen?

My project involved a T junction, and the lights would only trigger on a vehicle approaching on the minor road. But that was way back, when I was a student.

First step, stop using delay() for timing. It is like using the emergency brake to drive. Very little can happen during a delay() function, reading a button in the usual way is right out.

Look at the "Blink without delay" and "Debounce" sketches in the Examples in the Arduino IDE.

     if(TLightRed == false|| TLightRed == true) { // if red traffic light is one or off

What is this nonsense? There are NO possible values for TLightRed for which this statement will not be true. If the statement will always be true, it is pointless to test.