pulsador como interruptor

Buenas!
Estoy intentando hacer de un pulsador un interruptor, pero no hay forma...Creo que no es complicado pero no lo consigo.
Lo que quiero es primera pulsación encendido y la siguiente apagado. En un futuro lo quiero usar para el encendido/apagado de un circuito, ahora estoy practicando con un led.

Me puede dar alguna idea alguien??
Gracias de antemano.

Primero tienes que hacer en el pulsador una detección por flanco, aquí está explicado http://arduino.cc/forum/index.php/topic,96810.0.html
Una vez detectado el flanco la acción a ejecutar es conmutar el valor de una variable entre 0 y 1. Ya no tienes más que activar o desactivar la salida según el valor de esa variable.

Cheyenne muchas gracias por tu ayuda. El enlace es perfecto. Ahora mismo lo voy a intentar.

Un saludo.

Lo acabo de probar, a primera vista me había parecido que funcionaba de otra manera, es que esto no es lo que necesito.
El ejemplo del enlace lo que hace es mantener el led encendido un tiempo (prefijado por el usuario) cada vez que pulso el botón.
Lo que yo quiero es que cuando yo pulse la primera vez (ON), el led se mantenga encendido hasta que vuelva a pulsar(OFF), que se apagará. Así sucesivamente.

Mamumo,

Necesitas una variable que es la que controlas con el interruptor, y lo que hace el led lo decides sobre el valor de esa variable.

Cuando acciones el pulsador compruebas el valor de la variable y le asignas el contrario, de tal forma que la variable va cogiendo los siguientes valores ON --> OFF --> ON --> OFF --> ON --> OFF --> etc...

Despues tienes que comprovar la variable y decidir si enciendes el led (ON) o si lo apagas (OFF)

Gracias por la contestación.
voy bien encaminada? he probado este programa. Pero una vez que pulso el led se queda encendido.Tengo que conseguir que se apague....

const int pulsador = 2; // the number of the pushbutton pin
const int led = 13; // the number of the LED pin

// variables will change:
long EstadoActual = 0;
long EstadoAnterior = 0;
boolean pulsadorON=false;

void setup() {
pinMode(led, OUTPUT);
pinMode(pulsador, INPUT);
Serial.begin(9600);

}

void loop(){

EstadoActual = digitalRead(pulsador);

if (EstadoActual == 1 & EstadoAnterior == 0){
pulsadorON=true;
}
EstadoAnterior = EstadoActual;

if (EstadoActual == 0 & EstadoAnterior == 1){
pulsadorON=false;
}
EstadoAnterior = EstadoActual;

if(pulsadorON==true){
digitalWrite(led,HIGH);
}
if(pulsadorON==false){
digitalWrite(led,LOW);
}

}

Esto que te pongo no es Codigo para que copies y pegues, es simplemente para que te guies y puedas aprender el funcionamiento...

boolean Valor_pulsador = 0;  // OFF

void loop(){
  
  if (digitalRead(pulsador)){          // Cuando el pulsador está activo...
    Valor_pulsador = !Valor_pulsador;  // Asigna el valor contrario (ON --> OFF --> ON --> OFF...)
  }

  if(Valor_pulsador){        // si Valor_pulsador es Verdadero --> 1 --> ON
  digitalWrite(led,HIGH);    // Enciende el Led
  }
  else {                    // De lo contrario
   digitalWrite(led,LOW);   // Apaga el Led
  }
  
}

Intenta entenderlo linea por línea...

Este es un codigo muy sencillo, se puede mejorar mucho...

1 Like