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!