Variar la intensidad de la luminosidad en un led con un pulsador

Hola, me mandaron a hacer lo siguiente
Conectar un pin con un pulsador y que cuando mantenga presionado el pulsador se empiece a encender el led poco a poco (no necesariamente hasta su máximo brillo). Luego cuando se vuelve a mantener pulsado el led debe empezar a bajar su brillo
Además el led debe recordar con qué brillo quedó la última vez y partir de ese último brillo para encender o apagarse más.

Este es mi código, pero lo único que hace es partir encendido y apagarse mientras presiono.

int led = 3; 
int boton=2;
int estadoanterior=0; //guarda el estado anterior del boton
int salida=0; //0 para led apagado. 1 para led encendido
int brillo=0; //cantidad de brillo del led

void setup() {
 
 pinMode(led,OUTPUT);
 pinMode(boton,INPUT);
}

void loop() {
 
 if((digitalRead(boton)==HIGH) && (estadoanterior == LOW)){
   salida=1-salida;
   delay(20);
 }
estadoanterior=digitalRead(boton);  //guarda el estado actual del boton
 if(salida==1){
   while(digitalRead(boton)==HIGH){
     analogWrite(led,brillo);
     brillo=brillo+1;
     delay(10);
   }
 }
 else{
    while(digitalRead(boton)==HIGH){
     analogWrite(led,brillo);
     brillo=brillo-1;
     delay(10);
 }
}
}

MODERADOR: He editado título y código de acuerdo a lo indicado.

Hola, @andrewpard0.
Edita el título usando minúsculas y tu código agregándole etiquetas.
Por favor te invito a leer las Normas del foro

Prueba este código a ver si funciona como esperas.

const byte led       = 3;
const byte boton     = 2;
bool  estadoanterior = false;   // guarda el estado anterior del boton
bool  salida         = false;   // 0 para led apagado. 1 para led encendido
byte brillo          = 0;       // cantidad de brillo del led

void setup() {

 pinMode(led,OUTPUT);
 pinMode(boton,INPUT);
}

void loop() {

   estado = digitalRead(boton);  //guarda el estado actual del boton
   if (estado==HIGH && estadoanterior == LOW){
       salida = 1-salida;
       delay(20);
   }
   estadoanterior = estado;  //guarda el estado actual del boton

   if (salida){
       analogWrite(led,brillo);
       brillo=brillo+1;
       delay(10);
   }
   else {
       analogWrite(led,brillo);
       brillo=brillo-1;
       delay(10);
   }
}