¿Alguien me ayuda comprender este código ? Me estoy volviendo loco

Hola buenas a todos , soy nuevo en esto foro y también en lo que se refiere Arduino
llevo varios días intentando comprender este código que a continuación paso a comentar según como yo lo veo:

En este código de encender y apagar un led con un pulsador, es decir pulso una vez se enciende pulso otra vez se apaga
Yo entiendo lo siguiente:

-Primera vez que pulso (led apagado).
Estado es igual a 1 y estado anterior = 0 se cumple la condición y
el led se encenderá
estado = estadoanterior por lo tanto 1 = 1

-Segunda vez que pulso (led encendido).
Estado es igual a 1 y estado anterior es igual a 1 por lo tanto no se cumple la condición y se apaga.
estado = estadoanterior, por lo tanto 1 = 1

-Tercera vez que pulso.
Estado igual a 1 y estado anterior es igual a 1 por lo tanto no se cumple la condición y el led tendría que permanececer apagado
estado = estadoanterior por lo tanto 1 =1

Y así todas las veces que pulse , según lo que yo entiendo el led no se volvería a encender porque estado es igual a estado anterior ,lógicamente sé que no es así ya que con este código el led se apaga y enciende una y otra vez pero no entiendo la parte de
estado = estadoanterior
¿Alguien me lo podría explicar?, sé que es una tontería pero es que no soy capaz de verlo y llevo días intentando comprenderlo
Saludos

int estado = 0;
int estadoAnterior;
int salida = 0;
void setup(){
pinMode (8,INPUT);
pinMode (4,OUTPUT);

}

void loop(){
  estado = digitalRead(8);
  
  if ((estado == HIGH) &&(estadoAnterior == LOW)){
    salida = 1 - salida;
  }
  
  estadoAnterior = estado;
  
  if(salida == 1) {
    digitalWrite(4,HIGH);
  }
  
  else{
    digitalWrite(4,LOW);
  }
}

Hola:

EL código funciona, pero no esta muy elegante ni prolijo Se puede mejorar un montón..
Un problema con los botones es que no se sabe cuanto tiempo se oprime (1 segundo, 1/4 s, 1/1000 s). Entonces la función de estado y estadoAnterior es que se active el switch solo cuando pasa el botón de no presionado (LOW) a presionado (HIGH) sin importar cuanto tiempo este presionado.
Lo que define si se prende o no es salida.
Aparte, aunque lo hace solo el entorno de programación, no estaría mal inicializar estado y estadoAnterior en LOW.

Muchas gracías , por la respuesta, voy a analizarlo para interntarlo comprender .
en breve os voy a exponer un proyecto que tengo marcha para controlar la valvula de filtro de una piscina , y que realise las tareas automaticamente (lavado, filtrado, enjuague, etc), un saludo y gracías por todo