Proyecto 8: LED controlado por botón
Introducción:
Puerto I/O significa puerto de ENTRADA /SALIDA (INPUT / OUTPUT). Hasta este punto hemos utilizado los pines digitalescomo salida, en este experimento utilizaremos uno de los pines digitales como entradapara leer el dispositivo conectado a él, en este caso un botón, sin oprimir(abierto, 0v, LOW) y cuando se oprime (cerrado, 5v, HIGH).
Hardwarea Utilizar
Placa Arduinio
Cable USB
Switch de botón
LED
Resistencia 220 ohms
Resitencia 10K ohms (marrón, negro, naranja)
Protoboard
Cables
Diagrama esquemático
Conexión del circuito
Sketch de ejemplo:
Cuando oprimimos y soltamos el botón se encenderá el LED y permanecerá encendido, al volver a presionar y soltar el botón elLED se apagará y permanecerá apagado.
Primero realizaremos el sketch suponiendo que el botón entrega un pulso limpio y sin rebotes, probaremos el circuito y veremos que su funcionamiento es errático.
Para hacer el sketch mucho más corto utilizaremos una nuevatécnica llamada
interrupciones de hardware que explicaremos mas adelante
/////
int LED = 11;
int PULSADOR =2;
volatile int estado = LOW;
void setup()
{
pinMode (LED,OUTPUT);
pinMode (PULSADOR,INPUT);
attachInterrupt(digitalPinToInterrupt(PULSADOR),manejadorpulsador,RISING);
digitalWrite (LED,estado);
}
void manejadorpulsador()
{
estado = !estado;
}
void loop()
{
digitalWrite(LED,estado);
}
/////
Revisa y sube el sketch a tu placa Arduino, comprueba el funcionamiento del circuito.
Como te habrás dado cuenta el circuito funciona, a veces si, a veces no, tienes que insistir varias veces para obtener el resultado que se espera, ya sea que prenda el LED o que apague.
Ahora utilizaremos un código totalmente diferente al anterior, sin interrupciones de hardware, basándonos en el sketch del proyecto antirrebote
/////
const int boton = 2; // declaramos constante entera botón
const int tiempoAntirebote = 10; //declaramos constante entera tiempoAntirrebote
int estadoBoton; // declaramos variable entera estadoBoton, no se le asigna valor
int estadoBotonAnterior; // declaramos variable entera estadoBotonAnterior,
int ledPin = 11;
boolean LED;
booleanantirebote(int pin) // inicia función antirrebote
{
int contador = 0; //declara variable entera contador y la iguala a cero
boolean estado; //declara variable tipo boolean estado, no le asigna valor
booleanestadoAnterior; //declara variable tipo boolean estadoAnterior, no le asigna valor inicial
do //inicia función do while
{
estado = digitalRead(pin); // lee el estado de pin y le asigna el valor a la variable estado
if(estado !=estadoAnterior) //comparamos el estado actual con el anterior
{
contador = 0; //Reiniciamos el contador
estadoAnterior =estado; // asigna el valor de estado a la variable estadoAnterior
}
else //si estado no es diferente a estadoAnteriorse ejecutan instrucciones de función else
{
contador =contador + 1; //la variable contador se incrementa en uno
}
delay(1); // espera un milisegundo
}
while(contador< tiempoAntirebote); //ejecuta las instrucciones do si contador es menor que tiempoAntirrebote
return estado; // regresa la variable estado al programa para continuar ejecución
} //termina función antirrebote
void setup() //inicia función de configuración
{
pinMode(boton,INPUT); // Declaramos el botón como entrada
pinMode (ledPin,OUTPUT);
LED = false;
}
void loop()
{
estadoBoton =digitalRead(boton); // Leemos el estado del botón
if(estadoBoton !=estadoBotonAnterior) // si hay cambio con respecto al estado anterior del botón
{
if(antirebote(boton)==true)// checamos si esta presionado y si lo esta
{
LED =! LED;
digitalWrite(ledPin,LED);
}
estadoBotonAnterior= estadoBoton; //Guardamos el estado del botón
}
}
/////
Revisa y sube el sketch a la placa Arduino, oprime el botón, oprímelo varias veces, intenta hacer fallar el circuito, verás que es estable y libre de fallas.
LED =! LED Adivinaste qué es lo que hace esta instrucción? El signo de admiración equivale a NEGACION, si LED era HIGH al negarlo se convierte en LOW y viceversa.
Reto de Proyecto: Agrega un segundo LED con su respectiva resistencia, conéctalo al pin 10, haz que este encienda y apague al contrario del primer LED (cuando uno está encendido el otro está apagado y viceversa)
********************************************************************************
Problemas escribiendo el código? descarga los ejemplos desde mi carpeta compartida en Dropbox:
https://www.dropbox.com/sh/w5h38cdrynqdwhf/AABP7b9T3ADbO4KqiPm4pO-9a?dl=0
Introducción:
Puerto I/O significa puerto de ENTRADA /SALIDA (INPUT / OUTPUT). Hasta este punto hemos utilizado los pines digitalescomo salida, en este experimento utilizaremos uno de los pines digitales como entradapara leer el dispositivo conectado a él, en este caso un botón, sin oprimir(abierto, 0v, LOW) y cuando se oprime (cerrado, 5v, HIGH).
Hardwarea Utilizar
Placa Arduinio
Cable USB
Switch de botón
LED
Resistencia 220 ohms
Resitencia 10K ohms (marrón, negro, naranja)
Protoboard
Cables
Diagrama esquemático
Conexión del circuito
Sketch de ejemplo:
Cuando oprimimos y soltamos el botón se encenderá el LED y permanecerá encendido, al volver a presionar y soltar el botón elLED se apagará y permanecerá apagado.
Primero realizaremos el sketch suponiendo que el botón entrega un pulso limpio y sin rebotes, probaremos el circuito y veremos que su funcionamiento es errático.
Para hacer el sketch mucho más corto utilizaremos una nuevatécnica llamada
interrupciones de hardware que explicaremos mas adelante
/////
int LED = 11;
int PULSADOR =2;
volatile int estado = LOW;
void setup()
{
pinMode (LED,OUTPUT);
pinMode (PULSADOR,INPUT);
attachInterrupt(digitalPinToInterrupt(PULSADOR),manejadorpulsador,RISING);
digitalWrite (LED,estado);
}
void manejadorpulsador()
{
estado = !estado;
}
void loop()
{
digitalWrite(LED,estado);
}
/////
Revisa y sube el sketch a tu placa Arduino, comprueba el funcionamiento del circuito.
Como te habrás dado cuenta el circuito funciona, a veces si, a veces no, tienes que insistir varias veces para obtener el resultado que se espera, ya sea que prenda el LED o que apague.
Ahora utilizaremos un código totalmente diferente al anterior, sin interrupciones de hardware, basándonos en el sketch del proyecto antirrebote
/////
const int boton = 2; // declaramos constante entera botón
const int tiempoAntirebote = 10; //declaramos constante entera tiempoAntirrebote
int estadoBoton; // declaramos variable entera estadoBoton, no se le asigna valor
int estadoBotonAnterior; // declaramos variable entera estadoBotonAnterior,
int ledPin = 11;
boolean LED;
booleanantirebote(int pin) // inicia función antirrebote
{
int contador = 0; //declara variable entera contador y la iguala a cero
boolean estado; //declara variable tipo boolean estado, no le asigna valor
booleanestadoAnterior; //declara variable tipo boolean estadoAnterior, no le asigna valor inicial
do //inicia función do while
{
estado = digitalRead(pin); // lee el estado de pin y le asigna el valor a la variable estado
if(estado !=estadoAnterior) //comparamos el estado actual con el anterior
{
contador = 0; //Reiniciamos el contador
estadoAnterior =estado; // asigna el valor de estado a la variable estadoAnterior
}
else //si estado no es diferente a estadoAnteriorse ejecutan instrucciones de función else
{
contador =contador + 1; //la variable contador se incrementa en uno
}
delay(1); // espera un milisegundo
}
while(contador< tiempoAntirebote); //ejecuta las instrucciones do si contador es menor que tiempoAntirrebote
return estado; // regresa la variable estado al programa para continuar ejecución
} //termina función antirrebote
void setup() //inicia función de configuración
{
pinMode(boton,INPUT); // Declaramos el botón como entrada
pinMode (ledPin,OUTPUT);
LED = false;
}
void loop()
{
estadoBoton =digitalRead(boton); // Leemos el estado del botón
if(estadoBoton !=estadoBotonAnterior) // si hay cambio con respecto al estado anterior del botón
{
if(antirebote(boton)==true)// checamos si esta presionado y si lo esta
{
LED =! LED;
digitalWrite(ledPin,LED);
}
estadoBotonAnterior= estadoBoton; //Guardamos el estado del botón
}
}
/////
Revisa y sube el sketch a la placa Arduino, oprime el botón, oprímelo varias veces, intenta hacer fallar el circuito, verás que es estable y libre de fallas.
LED =! LED Adivinaste qué es lo que hace esta instrucción? El signo de admiración equivale a NEGACION, si LED era HIGH al negarlo se convierte en LOW y viceversa.
Reto de Proyecto: Agrega un segundo LED con su respectiva resistencia, conéctalo al pin 10, haz que este encienda y apague al contrario del primer LED (cuando uno está encendido el otro está apagado y viceversa)
********************************************************************************
Problemas escribiendo el código? descarga los ejemplos desde mi carpeta compartida en Dropbox:
https://www.dropbox.com/sh/w5h38cdrynqdwhf/AABP7b9T3ADbO4KqiPm4pO-9a?dl=0