Problema, encender led solo una vez, cada que se seleccione posicion

Buen dia! Tengo un selector de posiciones (de enclavamiento) con el cual selecciono el tiempo que durará encendida una salida (led) al pulsar un boton start. Donde la primera posicion del selector es OFF y las siguientes 4 son tiempos diferentes.

El problema es que al poner el selector en OFF debe sonar un buzzer de alarma un segundo (para indicar que se interrumpió el tiempo) de igual manera debe sonar un segundo si se deja que termine el tiempo (para indicar que el ciclo terminó). Pero lo intenté hacer con la fución de primera vez y pues sólo lo hace una vez, intenté con un delay pero se repite mientras el selector este en OFF. Mi código lo implementé con función Switch Case de la siguiente manera:

const int min = 0;     
const int max = 1023; 
const int led=13;
const int start=10;
int ledState = LOW;                  
long OnTime = 5000;                     
unsigned long previousMillis = 0; 
int buzzer=3;
 
void setup() {
  pinMode (buzzer, OUTPUT);
  pinMode (led, OUTPUT);

  Serial.begin(9600); }
void loop() {
 
int sensorReading = analogRead(A0);
int range = map(sensorReading, min, max, 0, 4);
unsigned long currentMillis = millis();
switch (range) {
    
case 0:   //Potentiometer turned between 0-25%
   ledState=LOW;
   Serial.println("OFF");
    break;
 
 
case 1:    //Potentiometer turned upto 26-50% 
  if((ledState == HIGH) && (currentMillis - previousMillis >= OnTime))  {
    ledState = LOW;  // Turn it off
    previousMillis = currentMillis;  
    digitalWrite(led, ledState); 
  }
  else if ((ledState == LOW) && digitalRead(start)== HIGH)
  {
    ledState = HIGH;  
    previousMillis = currentMillis;   
    digitalWrite(led, ledState);	 
  }
   Serial.println("TIEMPO 1");
   break;
 
case 2:     //Potentiometer turned upto 51-75%
   if((ledState == HIGH) && (currentMillis - previousMillis >= (OnTime + 2000)))  {
    ledState = LOW;  // Turn it off
    previousMillis = currentMillis;  
    digitalWrite(led, ledState);  
  }
  else if ((ledState == LOW) && digitalRead(start)== HIGH)
  {
    ledState = HIGH;  
    previousMillis = currentMillis;   
    digitalWrite(led, ledState);	 
  }
 Serial.println("TIEMPO 2");
 break;
 
case 3:   //Potentiometer turned upto 76-100%
  if((ledState == HIGH) && (currentMillis - previousMillis >= (OnTime + 4000)))
  {
    ledState = LOW;  
    previousMillis = currentMillis;  
    digitalWrite(led, ledState);  
  }
  else if ((ledState == LOW) && digitalRead(start)== HIGH)
  {
    ledState = HIGH;  
    previousMillis = currentMillis;  
    digitalWrite(led, ledState);	  
  }
    Serial.println("TIEMPO 3");
    break;
   
case 4:   //Potentiometer turned upto 76-100%
   if((ledState == HIGH) && (currentMillis - previousMillis >= (OnTime + 6000)))
  {
    ledState = LOW;  
    previousMillis = currentMillis;  
    digitalWrite(led, ledState);  
  }
  else if ((ledState == LOW) && digitalRead(start)== HIGH)
  {
    ledState = HIGH;  
    previousMillis = currentMillis;  
    digitalWrite(led, ledState);	  
  }
  Serial.println("TIEMPO 4");
   break;
  }
   digitalWrite(led, ledState); 
   delay(100);        
 }

Cabe destacar que la función del buzzer que quiero realizar es la que quiero colocar en mi Case 0.
Agradezco bastante cualquier manera que me puedan ayudar!

El problema es

That you posted in a foreign language in the English section of the forum.

Thanks i haven´t experience in the forum, i posted it yet in english language :slight_smile:

No veo una "input" en su programa. No estoy seguro , pero creo que si va a convertir algo en un interruptor , es necesario decirle a la computadora ( Arduino ) que necesita para leer una variable que es un "input". Una vez más , yo todavía estoy aprendiendo el lenguaje de programación Arduino . Por favor, dígame si esto ayudó, o si he hecho un error.

Perdon por mi error gramatical quiero decir que si vas a convertir algo con un interruptor le tienes que decir a la computadora que es un "input"

ruiz_13 Tienes razón, solo que en este caso estoy utilizando una entrada análoga, ya que a mi selector le coloqué solo 3 cables en lugar de 1 por cada señal (perdón por no aclarar). Pero de echo así sin declarar la A0 funciona. Tienes alguna idea de como hacer que mi alarma se active con las 2 condiciones que necesito?
Gracias!

Hola.
No he entendido demasiado bien lo que intentas hacer. Entiendo que con el selector escoges un tiempo, y al pulsar el botón se ejecuta ese tiempo, pero que quieres detectar cuándo el selector ha cambiado a posición cero (cambiado es la palabra clave).
Establece una variable global int lastRange=-1
en el loop, tras leer range comparas con lastRange y si es diferente es que el selector ha cambiado y ejecutas lo que corresponda, y vuelves a igualar lastRange=range, con lo que sólo se ejecutará una vez.
No sé si es lo que buscas, pero si no es así, intenta explicar mejor los distintos estados/respuestas posibles de tus dispositivos.

conectaste 3 cables como? Si no usas una red de resistencias digamos de 1k cada uno entre GND y el primer selector, entre primero y segundo y entre 2do y 3ro, mas un ultimo a 5V no puedes discriminar estados.

Aca esta para mas pulsadores pero es la misma idea