El fucionamiento es teóricamente sencillo, cada vez que el interruptor cambia de posición arduino debe enviar un pulso.
He tratado de realizarlo leyendo los flancos pero no consigo hacerlo funcionar. Este es el código que he desarrollado. Por supuesto admito toda ayuda y sugerencia.
Muchas gracias de antemano.
type or paste code here
int contador = 0;
bool dato = LOW;
bool datoAnterior = LOW;
const int ACTIVAR_RELE = 3;
const int Interruptor = 0;
void setup() {
pinMode(0,INPUT);
pinMode(Interruptor,INPUT);
pinMode(ACTIVAR_RELE,OUTPUT);
}
void loop() {
dato = digitalRead(0);
if (dato != datoAnterior)
{
digitalWrite(ACTIVAR_RELE,HIGH); //Se manda un ALTO al Relé.
delay(75); // Espera 75ms
digitalWrite(ACTIVAR_RELE,LOW); //Se manda un DOWN al Relé.
contador++;
}
datoAnterior = dato;
}
type or paste code here
No nos cuentas cómo has conectado el interruptor y puede ser uno de los problemas.
Lo otro que puede darte problemas es el pin que usas para la entrada, no aclaras tampoco cuál arduino usas pero cuidado que normalmente el pin 0 está asociado a Tx y puede interferir.
No tienes nada que evite los rebotes y ese tipo de interruptor suele ser muy "ruidoso".
Habiendo definido
const int Interruptor = 0;
entonces
pinMode(0,INPUT);
pinMode(Interruptor,INPUT);
es redundante.
Y finalmente y lo más importante, si haces
dato = digitalRead( 6 );
y tu entrada es el pin 0 no el pin 6, así no vas a leer jamás el estado del interruptor.
De funcionar el código funciona, no está mal planteado, pero debes leer el pin correcto.
Ciertamente, lo he probado con un Pro-Mini y funciona, por lo que como dices es cosa del Tiny a ver doy con la tecla, muchas gracias por todo, espero que a alguien más le sirva porque creo que es un poco tontería y no he encontrado nada el respecto por ahí.
Estaba mirando el pinout y entiendo que el pin 3, que usas para el relé, lo usa el USB y si lo estás alimentando desde el puerto USB eso puede dar problemas.
¿Por qué no pruebas a cambiar el pin de salida por el 1, por ejemplo, a ver si cambia algo?