const byte pininterruptor = 3;
const byte valvula = 4;
const byte sportboton = 8;
// variables.
byte estadopininterruptor = 0;
byte estadosportboton = 0;
// variable para pulsador antirebotes o bounce.
int estadoactual1 = 0;
int estadoactual2 = 0;
int estadoultimo = 0;
int contador = 0;
//--------------------------------------------
void setup()
{
// configuración de los pines.
pinmode(valvula, output);
pinmode(pininterruptor, input);
pinmode(sportboton, input);
digitalwrite(valvula, low);
serial.begin(9600);
}
//--------------------------------------------
void loop()
{
// lee el estado del pulsador e interruptor.
estadopininterruptor = digitalread(pininterruptor);
estadosportboton = digitalread(sportboton);
// modo 1) normal y 2) modificado.
// ¿int pulsado?
if (estadopininterruptor == high)
{
// sí. int ha sido pulsado.
// comprueba el estado del pulsador sport ha sido pulsado.
estadoactual1 = estadosportboton;
delay(10);
estadoactual2 = estadosportboton;
// ¿los estados no son iguales?
if (estadoactual1 == estadoactual2)
{
// ¿estadoactual es distinto a estadoultimo?
if (estadoactual1 != estadoultimo)
{
// ¿estadoactual es alto, 1, activado o high?
if (estadoactual1 == high)
{
contador = contador + 1;
serial.print ("Ésta es la pulsación nº ");
serial.println(contador);
}
}
}
estadoultimo = estadoactual1;
if (contador % 2 == 0)
{
// cerrar válvula.
digitalwrite(valvula, low);
}
else
{
// abrir válvula.
digitalwrite(valvula, high);
}
}
else // encontes. int no ha sido pulsado.
{
// cierra la válvula o el relé en nc.
digitalwrite(valvula, low);
}
}