Una de las maneras mas básicas de interactuar durante el funcionamiento de nuestro proyecto, es leyendo un pulsador con arduino a través de las entradas digitales que disponemos en sus pines.
Una entrada digital es un pin del que disponemos en nuestro arduino que leeremos al ejecutar el programa y que podrá tener dos estados dependiendo de el funcionamiento del dispositivo al que esta conectado.
Estos 2 estados serán 0 o 1 dependiendo si el pin se conecta a la tensión de alimentación (usualmente 5V) o a masa (0V).
Lo que hacemos en la práctica al leer una entrada digital es comparar su nivel de tensión con una referencia umbral. Si supera esta referencia la entrada estará a nivel alto y le asignamos el valor de 1. De lo contrario diremos que esta a nivel bajo y la tomaremos como 0.
Normalmente la tensión de alimentación de nuestro arduino suele ser 5V por lo que la tensión umbral que se tomo de referencia es de 2.5V aproximadamente.
No se puede introducir a una entrada digital tensiones fuera del rango 0-5 V ya que podriamos dañar el microcontrolador permanentemente.
En el ejemplo que vamos a ver, conectaremos la entrada a un pulsador que dependiendo si esta pulsado o no, conectará alternativamente la entrada a 5v o a 0V.
En estado de reposo, (sin pulsar el boton P1), nuestra entrada digital nº2 donde esta conectado el cable amarillo estará conectado a 0V o masa, a través de la resistencia de 10K que esta a 0V o también llamado con las siglas GND como esta serigrafiado en el arduino.
Esta resistencia de 10K se llama también resistencia «pull-down» ya que nos pone la entrada 2 a estado bajo (down) para evitar que cuando no pulsamos P1, la entrada quede sin conectar a nada en un estado indeterminado que de lugar a falsas lecturas y por lo tanto a problemas.
Hay que tener en cuenta que si no tuviésemos esa resistencia conectada entre GND y el pin 2, este pin no estaría conectado a ningún sitio mas que a un trozo de cable amarillo. Este cable actuaría como una antena que introduciría pequeñas tensiones a la entrada y podría dar lugar a una falsa lectura sin haber pulsado P1.
Si pulsamos P1, lo que haremos es conectar el pin izquierdo del pulsador que esta conectado a 5V por el cable rojo, al pin derecho que conecta a través del cable amarillo a nuestra entrada nº2. Esto hace que el arduino lea un estado 1 (5V) en la entrada.
En el arduino, los mismos pin pueden actuar como entrada o salida dependiendo de nuestras necesidades (obviamente no a la vez), esta función la configuraremos al principio del código para nuestro propósito.
Dependiendo del modelo de arduino que utilicemos, tendremos mas o menos pines disponibles para conectar entradas/salidas. En este ejercicio, usaremos el Arduino Uno que tiene 16 E/S digitales además de 6 entradas analógicas que trataremos en otro post.
Una vez montado el esquema como en la imagen, procederemos a cargar el programa en nuestro arduino.
Para ello, ejecutaremos el IDE que instalamos anteriormente, conectaremos nuestro Arduino al puerto USB y comprobaremos que nos lo ha detectado en el puerto COM.x. del ordenador.
Ahora abriremos un programa incluido en los ejemplos del IDE.
Para ello iremos en el menú a Archivo:
y abriremos el ejemplo DigitalReadSerial:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
/* DigitalReadSerial Reads a digital input on pin 2, prints the result to the serial monitor This example code is in the public domain. */ // digital pin 2 has a pushbutton attached to it. Give it a name: int pushButton = 2; // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // make the pushbutton's pin an input: pinMode(pushButton, INPUT); } // the loop routine runs over and over again forever: void loop() { // read the input pin: int buttonState = digitalRead(pushButton); // print out the state of the button: Serial.println(buttonState); delay(1); // delay in between reads for stability } |
Ahora ya podemos programar nuestro Arduino (recuerda con el boton —> «subir») en la parte superior del IDE.
Una vez cargado el programa, vamos a usar el monitor serie. Para ello pulsaremos en la esquina superior derecha del IDE el icono con forma de lupa.
El monitor serie nos sirve para comunicarnos con nuestro Arduino.
Con el podremos recibir y leer (parte inferior) los datos que nos envie el Arduino y en la caja superior podemos escribir y enviar datos al mismo.
El monitor serie es muy útil, pues nos permite comunicarnos con nuestro Arduino a través de nuestro teclado y pantalla del ordenador, sin necesidad de conectar nada más.
Como se puede apreciar en la captura, en nuestro ejemplo, el Arduino nos envía a través del puerto serie un 1 o un 0, si mantenemos pulsado o no el pulsador que hemos conectado a la entrada nº 2.
Encender un led con el pulsador
Vamos a modificar un poco el ejemplo que tenemos para que además de leer la entrada, actuemos sobre una salida y se encienda el led que lleva incorporado el arduino en el pin 13.
Para ello tendremos que añadir un par de lineas en nuestro programa:
La primera es para decirle a nuestro arduino que vamos a usar el pin 13 como salida:
1 |
pinMode(13, OUTPUT); |
Esta instrucción irá dentro de la parte de setup{}
La segunda es para que el estado en que se encuentre la entrada, nos lo ponga en la salida del pin 13, de manera que si esta a 1 el led se encienda y si esta a 0 se apague esta parte va dentro de loop{}:
1 |
digitalWrite(13,buttonState); |
Lo que realmente pone el arduino en la salida 13 es el valor (1 ó 0) que tiene la variable buttonState que almacena el estado del botón leído anteriormente en la linea 24:
1 |
int buttonState = digitalRead(pushButton); |
En resumen, el programa quedará así con las lineas añadidas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/* DigitalReadSerial Reads a digital input on pin 2, prints the result to the serial monitor and pin 13 This example code is in the public domain. */ // digital pin 2 has a pushbutton attached to it. Give it a name: int pushButton = 2; // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // make the pushbutton's pin an input: pinMode(pushButton, INPUT); // make the pin 13 an output: pinMode(13, OUTPUT); } // the loop routine runs over and over again forever: void loop() { // read the input pin: int buttonState = digitalRead(pushButton); // print out the state of the button: Serial.println(buttonState); digitalWrite(13,buttonState); // valor del pulsador al led delay(1); // delay in between reads for stability } |
Ahora podemos cargar nuestro programa en el arduino y comprobar que funciona:
Si pulsamos P1 se debe encender el led y cuando lo soltemos apagarse.
Puedes ir a este enlace para conseguir todos los componentes necesarios, arduino y otras herramientas para poder montar este y otros muchos proyectos que publicaré en futuros artículos.
Bueno, pues hasta aquí el montaje de hoy, en otro post trataremos otra clase de entradas que son las analógicas.
Espero que te haya gustado y que practiques lo aprendido hoy.
Hasta el próximo post…

Recibe los artículos directamente en tu email el día de la publicación.
Garantía 100% libre de spam.
Deja un comentario