Buen día colegas!
Estoy haciendo un proyecto donde por medio de una perilla de 4 posiciones, pretendo controlar el encendido y tiempo de encendido de una salida la cual llamé "reac". Las condiciones de la perilla son:
1.-Siempre que la perilla esté en posición 1, mi salida reac debe apagarse.
2.-Si la perilla esta en posición 2, la salida "reac" debe encenderse 40 segundos, después apagarse 10 segundos y volver a repetir este ciclo de encendido y apagado permanentemente.
3.-Si la perilla esta en posicion 3, la salida "reac" debe encenderse 50 segundos, después apagarse 10 segundos y volver a repetir este ciclo de encendido y apagado permanentemente.
4.-Si la perilla está en posición 4, la salida "reac" debe encenderse 60 segundos, después apagarse 20 segundos y volver a repetir este ciclo de encendido y apagado permanentemente.
Estas condiciones ya las tengo sin problemas. El problema es que si cambio la perilla, por ejemplo de la posición 2 a la 3 y en ese momento la salida "reac" estaba apagada, al cambiarlo a la 3 sigue apagada mi salida hasta que no termine el tiempo de apagado de la posición anterior y así entre las posiciones 2,3 y 4.
Lo que deseo es que al cambiar la posición la salida se resetién los tiempos para que se encienda de inmediato la salida y se actualize el tiempo de encendido y apagado de la nueva posición. Tengo entendido que con un cambio de estado lo puedo hacer, pero me podrían ayudar a decirme como lo puedo hacer? Ya que es uno de mis primeros proyectos en Arduino.
Gracias!!!
const int min = 0;
const int max = 1023;
const int reac=13;
int reacState = LOW;
long OnTime = 40000;
long OffTime= 10000;
unsigned long previousMillis = 0;
void setup() {
pinMode (reac, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int sensorReading = analogRead(A0);
int range = map(sensorReading, min, max, 0, 3);
unsigned long currentMillis = millis();
switch (range) {
case 0:
reacState=LOW;
digitalWrite(reac, reacState);
Serial.println("OFF");
break;
case 1:
Serial.println("TIEMPO 1");
if((reacState == HIGH) && (currentMillis - previousMillis >= OnTime)) {
reacState = LOW;
previousMillis = currentMillis;
digitalWrite(reac, reacState);
}
else if (currentMillis - previousMillis > OffTime )
{
reacState = HIGH;
previousMillis = currentMillis;
digitalWrite(reac, reacState);
}
break;
case 2:
Serial.println("TIEMPO 2");
if (reacState == LOW) {
if(currentMillis - previousMillis > OffTime) {
previousMillis= currentMillis;
reacState = HIGH; }
digitalWrite(reac, reacState);
} else {
if(currentMillis - previousMillis > (OnTime + 10000)) {
previousMillis= currentMillis;
reacState = LOW;
digitalWrite(reac, reacState); }
}
break;
case 3:
Serial.println("TIEMPO 3");
if (reacState == LOW) {
if(currentMillis - previousMillis > OffTime) {
previousMillis= currentMillis;
reacState = HIGH; }
digitalWrite(reac, reacState);
} else {
if(currentMillis - previousMillis > (OnTme + 20000)) {
previousMillis= currentMillis;
reacState = LOW;
digitalWrite(reac, reacState); }
}
break;
digitalWrite(reac, reacState);
delay(100);
}}