Professional Documents
Culture Documents
mx/proyectos/botonComoSwitch
Componentes
arduino
protoboard
un led
un botn
una resistencia de 220 oms (rojo, rojo, caf)
una resistencia de 10 Koms (caf, negro, naranja)
al inicio
Circuito
El circuito que usaremos es el mismo que el de proyecto sensando un
bton. Este consta de dos circuitos, uno con un led y su resistencia y
el otro con el boton y su resistencia de pull down.
al inicio
Diagrama
al inicio
Cdigo
En el sketch de este proyecto, tambin vamos a sensar el estado del
botn con la funcin digitalRead() y lo vamos a guardar en una
variable: estadoBoton.
Y vamos a utililizar otra variable: estadoLed, para guardar el estado del
led, prendido o apagado, 0 o 1.
Cada que se oprime el botn, cambia el valor
de estadoBoton de LOW a HIGH. Checaremos entonces con una
instruccin if si se da este cambio y cuando se de, cambiaremos el
valor de la variable estadoLed, de 1 a 0 o de 0 a 1.
Con otro if checamos el valor de estadoLed y de acuerdo a este valor,
encendemos o apagamos el led con la funcin digitalWrite().
/*
Un boton como switch con un led
*/
// constantes para definir los pines del boton y del led
const int pinBoton = 12; // el numero del pin con el boton
const int pinLed = 9; // el numero del pin con el LED
void setup() {
// inicializa el pin del led como de salida
pinMode(pinLed, OUTPUT);
// inicializa el pin del boton como de entrada
pinMode(pinBoton, INPUT);
}
void loop(){
// lee el valor del estado del boton
estadoBoton = digitalRead(pinBoton); // lee el estado del
boton
*/
void setup() {
// inicializa el pin del led como de salida
pinMode(pinLed, OUTPUT);
// inicializa el pin del boton como de entrada
pinMode(pinBoton, INPUT);
}
void loop(){
// lee el valor del estado del boton
estadoBoton = digitalRead(pinBoton); // lee el estado del
boton en pinBoton
// checa si el estado del boton es HIGH Y si el estado
anterior es LOW
if ((estadoBoton == HIGH) && (estadoAnterior == LOW)){
estadoLed = 1 - estadoLed; // si es asi cambia el
estado del led
}
*/
void setup() {
// inicializa el pin del led como de salida
pinMode(pinLed, OUTPUT);
// inicializa el pin del boton como de entrada
pinMode(pinBoton, INPUT);
}
void loop(){
// lee el valor del estado del boton
estadoBoton = digitalRead(pinBoton); // lee el estado del
boton en pinBoton
// checa si el estado del boton es HIGH Y si el estado
anterior es LOW
if ((estadoBoton == HIGH) && ( estadoAnterior == LOW)){
estadoLed = 1 - estadoLed; // si es asi cambia el estado
del led
delay(10); // y hace un delay de 10
milisegundos antes de continuar
}
if (estadoLed == 1) {
digitalWrite(pinLed, HIGH); // prende el led
} else {
digitalWrite(pinLed, LOW); // apaga el led
}
}
al inicio
Variantes
Hay otras formas de solucionar el problema del debouncing.
Soluciones por software, simples como sta o con una biblioteca que
puedes usar en tus sketchs. O soluciones con hardware, utilizando por
ejemplo un capacitor que elimine los brincos. Bscalas en la red o en
la bibliografa y pruebalas.
Utilizando las mismas ideas de este proyecto, cambia el led por los
leds verde y rojos que usamos en el proyecto de sensando un switch.
Que es lo que tendras que cambiar en el circuito y en el sketch?
al inicio
Referencias:
Arduino Reference: digitalRead()
Referencia Arduino: digitalRead()
Funcin para leer el estado de un pin digital.