Buenas. Llevo todo el día de hoy intentando programar con millis lo soguiente:
Arduino recibe una señal digital.
Al recibir esta señal, se activa relé 1 y relé 2 espera varios minutos para encenderse.
Si se corta la señal digital, el relé 2 se apaga y el relé 1 permanece encendido un par de minutos.
Esta era la base que luego quería complicar un poco más, haciendo que los pines del 6 al 12 fuesen salidas digitales de encendido temporizado con un minuto de incremento cada uno (para poder poner controlar el tiempo de espera del relé 1 sólo cambiando un cable de lugar) y los pines del 2 al 5, fuesen salidas digitales de apagado temporizado con un minuto de incremento también (pero partiendo de 0 minutos en lugar de desde 1) para controlar el comportamiento del relé 2 de idéntica forma.
Pues, aunque tengo correctamente realizado el montaje físico de la placa, soy incapaz de hacer que funcione ni la idea base; no me aclaro con el código y no entiendo qué está mal. Estoy bastante desesperado, la verdad; a ver si podéis ayudarme.
#include <Bounce2.h> // Incluimos biblioteca Bounce para eliminar el debouncing producido el rele de entrada
int BOMBA0M = 2 ;
int BOMBA1M = 3 ;
int BOMBA2M = 4 ;
int BOMBA3M = 5 ;
int AEROTERMIA1M = 6 ;
int AEROTERMIA2M = 7 ;
int AEROTERMIA3M = 8 ;
int AEROTERMIA4M = 9 ;
int AEROTERMIA5M = 10 ;
int AEROTERMIA6M = 11 ;
int AEROTERMIA7M = 12 ;
int ONOFF = 13 ;
unsigned long TIEMPOPULSADO = 0;
byte TEMP = 0;
Bounce debouncer = Bounce(); // Iniciado un objeto Bounce
void setup() {
pinMode( BOMBA0M , OUTPUT); // Sin retardador apagado bomba
pinMode( BOMBA1M , OUTPUT); // Retardo 1 minuto apagado bomba
pinMode( BOMBA2M , OUTPUT); // Retardo 2 minutos apagado bomba
pinMode( BOMBA3M , OUTPUT); // Retardo 3 minutos apagado bomba
pinMode( AEROTERMIA1M , OUTPUT); // Retardo 1 minuto encendido aerotermia
pinMode( AEROTERMIA2M , OUTPUT); // Retardo 2 minutos encendido aerotermia
pinMode( AEROTERMIA3M , OUTPUT); // Retardo 3 minutos encendido aerotermia
pinMode( AEROTERMIA4M , OUTPUT); // Retardo 4 minutos encendido aerotermia
pinMode( AEROTERMIA5M , OUTPUT); // Retardo 5 minutos encendido aerotermia
pinMode( AEROTERMIA6M , OUTPUT); // Retardo 6 minutos encendido aerotermia
pinMode( AEROTERMIA7M , OUTPUT); // Retardo 7 minutos encendido aerotermia
pinMode( ONOFF , INPUT_PULLUP); // Senal de la deshumidificadora
debouncer.attach(ONOFF);
debouncer.interval(50); // intervalo en ms, mas alto por ser un interruptor manual
}
void loop() {
debouncer.update(); // Actualizar los estados Bounce
int valor1 = debouncer.read(); // Leemos el del pulsador
if (digitalRead(valor1)==HIGH) {
TIEMPOPULSADO=millis();
TEMP = 1;
digitalWrite(AEROTERMIA1M,LOW);
}
if((millis()>TIEMPOPULSADO+2500)&&TEMP==1){
digitalWrite(AEROTERMIA1M,HIGH);
TEMP = 0;
}
digitalWrite(BOMBA0M,valor1) ; //apagamos las bombas
}