Hola:

Como puedes ver en el esquema, hay dos entradas y una salida.
Entradas:
INTERRUPTOR --> Es un interruptor normal.
SPORT --> Es un pulsador que si lo pulsas y lo dejas de pulsar, vuelve a su estado normal.
Salida:
Válvula
Si dejas el INTERRUPOR abierto que sería 0V, estaría en un modo que siempre la Válvula estaría cerrada. En este momento si pulsas el pulsador SPORT, lo ignora.
Si dejas el INTERRUPTOR cerrado que sería 5V, estaría en un modo en el cual ya te puede obedecer el pulsador SPORT.
Si pulsas una vez el pulsador SPORT, abre la Válvula, si lo vuelves a pulsar, cierra la Válvula.
Diagrama de flujo.

El código que he hecho hasta ahora no me funciona en Proteus 12 SP0.
Código Arduino:
Antes de comprar componentes y hacer una placa o PCB, quiero que en el simulador me funcione de maravilla.
¿Ves alguna solución?
Gracias.

Como puedes ver en el esquema, hay dos entradas y una salida.
Entradas:
INTERRUPTOR --> Es un interruptor normal.
SPORT --> Es un pulsador que si lo pulsas y lo dejas de pulsar, vuelve a su estado normal.
Salida:
Válvula
Si dejas el INTERRUPOR abierto que sería 0V, estaría en un modo que siempre la Válvula estaría cerrada. En este momento si pulsas el pulsador SPORT, lo ignora.
Si dejas el INTERRUPTOR cerrado que sería 5V, estaría en un modo en el cual ya te puede obedecer el pulsador SPORT.
Si pulsas una vez el pulsador SPORT, abre la Válvula, si lo vuelves a pulsar, cierra la Válvula.
Diagrama de flujo.

El código que he hecho hasta ahora no me funciona en Proteus 12 SP0.
Código Arduino:
C++:
// Constantes.
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 = sportBoton;
delay(10);
estadoActual2 = sportBoton;
// ¿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);
}
}
Antes de comprar componentes y hacer una placa o PCB, quiero que en el simulador me funcione de maravilla.
¿Ves alguna solución?
Gracias.