Este es tu problema?
while(!digitalRead(btn1));
porque no usas el flanco? Cuando pasa de 1 a 0 o sea de HIGH a LOW estas en tu cambio de menú.
Asi no tienes que mantener el pulsador.
para ello solo almacena el estado anterior y compara el actual con el anterior.
El anterior debe estar en HIGH y el actual tal como lo has indicado en LOW
entonces algo asi, defiendo dos nuevas variables estado y estadoAnt del tipo int.
// en globales
int estado, estadoAnt = true;
Mira los cambios y consulta.
void menus() {
estado = digitalRead(btn1);
if (!estado && estadoAnt) { // entra a cada menu solo cuando es presionado.
if (menu >= 3) menu = 0;
menu++;
switch(menu){
case 1: lcd.setCursor(8,0);
lcd.print("BA");
if (lectura1 == 0){
if (menu==1){
analogWrite(A2,LOW);
analogWrite(A3,HIGH);
analogWrite(A4,HIGH);
}
}
break;
case 2: lcd.setCursor(8,0);
lcd.print("ME");
if ( menu==2) {
analogWrite(A2,LOW);
analogWrite(A3,LOW);
analogWrite(A4,HIGH);
}
break;
case 3: lcd.setCursor(8,0);
lcd.print("AL");
if(menu== 3){
digitalWrite(A2,LOW);
analogWrite(A3,LOW);
analogWrite(A4,LOW);
}
break;
}
}
estadoAnt = estado;
}