Por favor si alguien puede aportar ideas lo agradecería:
Necesito en la rutina que controla el RELEUVC me funcione durante un tiempo pero no lo consigo. Gracias.
Gracias y un saludo.
El primer relé lo tengo solucionado con una rutina delay() porque no es crítico.
El segundo ya me vuelve loco porque no me funciona como quiero que lo haga, introduzco código con delay() porque los otros no ha funcionado ninguno. No quiero usar una placa de tiempo real adicional sino hacerlo con software, ayuda por favor:
int RELEPURIF = 4;
int RELEUVC = 5;
int SENSORM = 6;
int ESTADOSENSORM = LOW;
int PRESENCIA = LOW;
void setup() {
pinMode(SENSORM, INPUT);
pinMode(RELEPURIF, OUTPUT);
pinMode(RELEUVC, OUTPUT);
digitalWrite(RELEPURIF, HIGH);
digitalWrite(RELEUVC, HIGH);
delay(1000);
PRESENCIA = LOW;
ESTADOSENSORM = LOW;
}
void loop() {
ESTADOSENSORM = digitalRead(SENSORM);
if (ESTADOSENSORM == HIGH){
digitalWrite(RELEUVC,HIGH);
digitalWrite(RELEPURIF,LOW);
delay(5000);// ESTA PUESTO A 5 SEGUNDOS, EN LA PRÁCTICA SERÁN 15 MINUTOS.
digitalWrite(RELEPURIF,HIGH);
PRESENCIA=HIGH;
}
if ((ESTADOSENSORM == LOW) && PRESENCIA == HIGH){ // ESTE ES EL BUCLE QUE NO QUIERO USAR DELAY Y QUIERO TEMPORIZAR CON MILLIS() POR EJEMPLO, METER EL MILLIS EN EL IF Y QUE ACTUA DURANTE UN TIEMPO QUE POR EJEMPLO SEAN 10 SEGUNDOS Y EN LA PRÁCTICA 20 MINUTOS
digitalWrite(RELEUVC,LOW);
digitalWrite(RELEPURIF,HIGH);
delay(100);
digitalWrite(RELEUVC,HIGH);
PRESENCIA=LOW;
}
}/code]
Y este es el código tras seguir el tutorial de milis() pero que no me funciona, no desactiva RELEUVC
int RELEPURIF = 4;
int RELEUVC = 5;
int SENSORM = 6;
int ESTADOSENSORM = LOW;
int PRESENCIA = LOW;
unsigned long t;
void setup() {
pinMode(SENSORM, INPUT);
pinMode(RELEPURIF, OUTPUT);
pinMode(RELEUVC, OUTPUT);
digitalWrite(RELEPURIF, HIGH);
digitalWrite(RELEUVC, HIGH);
delay(1000);
PRESENCIA = LOW;
ESTADOSENSORM = LOW;
}
void loop() {
ESTADOSENSORM = digitalRead(SENSORM);
if (ESTADOSENSORM == HIGH){
digitalWrite(RELEUVC,HIGH);
digitalWrite(RELEPURIF,LOW);
delay(5000);
digitalWrite(RELEPURIF,HIGH);
PRESENCIA=HIGH;
}
else {
if (PRESENCIA == HIGH){
digitalWrite(RELEUVC,LOW);
t=millis();
if ( millis()-t > 6000){
digitalWrite(RELEUVC,HIGH);
PRESENCIA=LOW;
}
}
}
}