Semaforo Complesso OK-Flip Flop Semplice ( e non ci salto fuori).

SIETE GRANDI

a grandi linee ho quasi capito il comando MILLIS quindi ho copiato e MODIFICATO questo sketc( no mi ricordo come si scrive) molto semplice per prendere dimestichezza ed ho immaginato una situazione un po più semplice......(Scusate le descrizioni ma servono a Me per Ricordare)

int A = LOW;             //INTero ( quindi 0 o 1) A= Basso ad A assegno un valore BASSO
long B = 0;                //Devo capire la differenza tra LONG ed INT comunque a B assegno il numero 0

void setup(){

 pinMode(9, OUTPUT);              //SEMAFORO
    pinMode(4, INPUT);              //PULSANTE VECCHIETTO
 }

void loop(){

 if ((4, HIGH)&&(millis() > 2000 ))     // SE il vecchio preme il pulsante 4 (CONDIZIONE  1)  e 
                                                    Millis è MAGGIORE di 2 Secondi (CONDIZIONE 2)
 {
        B = millis();        //ASSEGNA a B il valore di MILLIS ( (50 giorni - 2secondi) X tutte le volte che ha
                                 lavorato(APPROFONDIRE)                                               
 
   if (A == LOW){        // SE (A è UGUALE ad un valore BASSO
            A = HIGH;      //ASSEGNA ad A un valore ALTO
   } 
        else                  //ALTRIMENTI
   A = LOW;               //ASSEGNA ad A un valore BASSO

   digitalWrite(9, A);    //SCRIVI sul Pin 9, il valore di A
    
}
}

ero contento perche funzionava tutto a meraviglia, finchè non ho deciso di metterci in mezzo IL MALEDETTO PULSANTE DEL VECCHIETTO e la doppia condizione && (che potrebbe essere una soluzione al mio semaforo )

...pero sta di fatto che le condizioni NON VENGONO RISPETTATE, e non capisco il perche.....sarà la maledidone del pulsante del vecchietto??