Entradas digitales con botones

esquema-boton

En la segunda sesión comenzamos a trabajar las entradas digitales con botones.

El funcionamiento básico de un botón es que al pulsarlo deja pasar la corriente (1 o HIGH o 5Vy si no pulsas no deja pasar la corriente(0 o LOW0V).

En primer lugar montaremos un botón básico teniendo en cuenta que no podemos conectar la salida del botón a la entrada sino que tendremos que poner una resistencia en el medio, que a su vez irá conectado a GND (masa).

Conectamos el valor de entrada del botón por ejemplo al pin digital nº 2 de Arduino. En la otra pata del botón conectaremos un cable a 5V. El esquema de montaje sería el siguiente:

esquema-boton

Para comprobar que nuestro montaje funciona y comprobar el resultado del estado del botón, podemos mostrar su valor a través del puerto serie de Arduino. El puerto serie es la principal forma de comunicación entre nuestro Arduino y el ordenador. Un puerto serie envía la información mediante una secuencia de bits utilizando como mínimo dos conectores para hacer esta comunicación: RX (recepción) y TX (transmisión). En Arduino UNO los pines empleados por defecto son 0 (RX) y 1 (TX). A continuación puedes comprobar cómo ver el valor del monitor serie en pantalla.

monitor-serie

Una vez montado tendría un aspecto como el siguiente:

montaje-de-boton

Una vez realizado el montaje, cargamos desde Arduino IDE, el siguiente programa que podremos encontrar en Ejemplos-Basics-DigitalReadSerial o en el siguiente enlace también está la información completa https://www.arduino.cc/en/Tutorial/DigitalReadSerial.

Del código fuente merece la pena comentar las siguientes instrucciones fundamentales:

int pushButton = 2;  //declaramos esta variable para la entrada digital nº2 de Arduino

Serial.begin(9600); //velocidad a la que va a trabajar el puerto serie, siempre 9600 Baudios

pinMode(pushButton, INPUT); //declaramos que la entrada digital la tratamos como entrada de datos, puesto que será el botón quien envíe datos hacia Arduino. El led por ejemplo lo tratamos como salida.

int buttonState = digitalRead(pushButton); // instrucción para leer el estado del botón que puede ser HIGH o LOW. El resultado lo guardamos en la variable buttonState

Serial.println(buttonState); // con esta instrucción visualizamos el estado del botón (uno o cero) en la pantalla del monitor serie y así comprobamos si el montaje está bien

Si todo va bien, veremos que en nuestro monitor serie aparece un 0 continuamente si no estamos pulsando el botón, y un 1 cuando lo hacemos.

Una vez que tenemos montado y funcionando correctamente nuestro montaje sólo con el botón, vamos a hacer el siguiente paso natural que será encender y apagar un led en función de si pulsamos un botón o no.

El esquema de montaje sería de la siguiente forma:

 boton-y-led-2

Con el montaje hecho, podemos cargar el código fuente desde Ejemplos-Digital-Button. De este programa, merece la pena explicar en detalle las siguientes instrucciones:

const int ledPin = 13; /declaramos esta variable para decir que conectaremos el led al pin digital 13

pinMode(ledPin, OUTPUT);  // declaramos este pin digital como salida, puesto que será Arduino quien envíe información hacia el led. En este caso, un 1 para encenderlo, y un 0 para apagarlo

if (buttonState == HIGH) {   // estructura condicional donde preguntamos si el botón está pulsado, entonces
// encendemos el led
digitalWrite(ledPin, HIGH);
}
else {
// en caso contrario apagamos el led
digitalWrite(ledPin, LOW);
}

Llegado este momento, y con el código cargado en Arduino, es momento de comprobar si se enciende nuestro led al pulsar el botón.

Y como no nos gusta despedirnos sin un reto final, os invitamos a añadir un segundo led para hacer un montaje tipo semáforo: un led verde que se encienda al pulsar el botón, y el otro led rojo encendido cuando no esté pulsado.

Os dejamos con Diego Rey, quien será el encargado de explicaros todo el proceso paso a paso:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *