Tutorial 2 – Entradas y Salidas Digitales

Lectura del estado de un pulsador para la activación de un LED

Vistas las resistencias Pull-Down, vamos a seguir cacharreando, esta vez incorporando la entrada de datos digitales en Arduino.

Introducción al tutorial

En este tutorial aprenderemos a configurar un determinado puerto como entrada, otro como salida, y activaremos o desactivaremos éste último para encender y apagar un led en función de la entrada. El siguiente vídeo muestra el resultado final de nuestro montaje.

Lista de componentes

Componentes para el montaje
Componentes para el montaje

Montaje del diseño

Como en el Tutorial 1, el led blanco de 5 mm también funciona sobre los 3v y una corriente de 0,15mA. Por tanto, ya tendríamos de sobra que saber calcular la resistencia necesaria para colocar en serie con el led:

[math]R=\frac{V}{I}=\frac{5V – 3V}{0,015A}=133,33\Omega[/math]

Por tanto podemos usar un valor típico igual o superior a ese. En mi caso, utilizaré una de 220Ω que tengo al alcance, proporcionando al led una corriente algo menor a 10mA, pero suficiente para que se ilumine. Además, de esta forma, alargaremos la vida del led. Con éstos números es obvio que una resistencia de un cuarto de watio nos valdrá:

[math]P=V^2/R=4V^2/220\Omega=0,018W[/math]

En éstos tutoriales de iniciación a arduino las conexiones eléctricas son pocas y fáciles de llevar a la práctica. Siguiendo en concordancia con esta norma, haremos un esquema muy simple, como el siguiente:

Diagrama conexiones eléctricas E/S Digitales
Diagrama conexiones eléctricas E/S Digitales

Podemos apreciar que la salida digital empleada para encender el led es la 53, mientras que nuestro pin para obtener datos y decidir si encenderlo o no es el pin digital 48. Observar la utilización de la resistencia pull-down en el anterior esquema de conexiones. Sin ella, el pin 48 quedaría al aire mientras el pulsador estuviera abierto, y no podríamos asegurar el estado lógico deseado debido a variaciones en el valor de tensión en ese pin.


El pulsador cuenta con un total de cuatro patillas, conectadas 2 a 2. Cuando lo mantenemos pulsado, los dos pares se conectan.

Esquema gráfico E/S Digitales
Esquema gráfico E/S Digitales

Cuando el circuito está en reposo (no estamos presionando el pulsador), nuestra entrada (pin 48 de arduino) obtendrá un 0 lógico, y tendremos nuestro led a 0v. En el momento que accionemos el pulsador, como la conexión con el pin 48 de nuestro arduino ofrece menos resistencia que la resistencia pull-down, obtendremos en ese pin un 1 lógico, y alimentaremos al led con 5v desde nuestro programa.

Escribiendo el programa

Como siempre, nuestro sketch bien comentado para que sea totalmente auto explicativo. Podéis descargarlo más abajo.

DigitalES (1840 descargas )

Por tanto, podemos dividir el programa en tres bloques bien diferenciados.

– En el primer bloque declaramos dos variables que nos permitirán trabajar con los pines elegidos de una forma mucho más cómoda. Siguiendo nuestras propias recomendaciones, hacemos la inicialización junto con la declaración de las variables.

– El segundo bloque de código comprende la función setup(). En ella, establecemos qué pin va a actuar como entrada de datos (48) y cuál como salida para encender y apagar el led (53).

– El tercer y último bloque es el comprendido en la función loop(). Se repite una y otra vez la misma secuencia: Obtenemos el estado del pulsador en el pin 48, y actuamos en consecuencia. Si está pulsado (HIGH), entonces activamos el led conectado en el pin 53 (5v). En caso contrario, escribimos un 0 lógico (0 v) en nuestra salida de datos (pin 53), manteniendo el led apagado.

Las únicas lineas que pueden no ser familiares hasta este momento son las lineas destacadas (33 y 38). digitalRead(numeroDePin); obtiene la tensión en el pin pasado como argumento y decide si es un 1 o un 0 lógico. Un 1 (HIGH) representará el pulsador accionado, y un 0 (LOW) el pulsador en reposo. Por último, el bloque formado por el código if y el código else permiten ejecutar una parte de código si la condición entre los paréntesis que siguen a if es verdadera, y otra parte de código (else) en caso contrario.

Si surge alguna duda o sugerencia, o simplemente quieres decirnos si te ha servido de ayuda, puedes dejar un comentario.

Hasta el próximo tutorial!


7 Comentarios

  1. Que tal muy bueno tu post necesito ayuda para ver el codigo para evaluar dos entradas y definir dos salidas.

  2. Hola un cordial saludo, quiero compartir un proyecto que estoy haciendo es sobre  codificar pulsos  de un radial telefónico antiguo, sino que tengo un problema ahora quiero sacar salidas por los pines  del arduino según el marcado por el radial de pulsos, me explico por ejemplo si giro el numero dos  me da cuatro pulsos en el radial, y automáticamente me salga una salida de 5vdc al pin de arduino, estoy tratando de programar  pero no consigo, serial gentil de ayudarme, espero su cordial respuesta.  este es mi correo tecnomovilraf@gmail.com

  3. hector minetti

    hola. necesito hacer un sorteador de 12 leds ,cada vez que apretas el pulsador sortea y prende un led,apretas y sortea ..es para hacer un batak ,es para ejercitar reflejos. si me podes ayudar con esto te agradesco…

    muchas gracias

  4. Hola, necesito que las salidas digitales me den valor negativo al pulsar .

    En arduino mega .

    Gracias desde ya

  5. Buenas, muy bien explicado pero me surge la duda de porque pones la R=10Ω,
    en segundo lugar me podría ayudar a realizar la siguiente modificación:

    Se trata de que el pulsador actúe como interruptor, es decir, si partimos de un estado de led inicial apagado, al pulsar por 1º vez el led se ha de mantener encendido hasta que se realice la 2º pulsación.

    He intentado ampliar su ejemplo recogiendo el estado del led en un nuevo pin.
    En cuanto al circuito he puesto la lectura en el mismo punto que la escritura.

    El programa es el siguiente:

    int led = 12; // Pin digital al que conectamos el LED
    int estadoBoton = 8; // Pin digital desde el que leeremos los estado botón
    int estadoled = 7; // Pin digital desde el que leeremos los estado led

    void setup()
    {
    pinMode(led, OUTPUT); // Configración del pin 12 como salida
    pinMode(estadoBoton, INPUT); // Configración del pin 8 como entrada
    pinMode(estadoled, INPUT); // Configración del pin 7 como entrada
    }

    void loop()
    {// Comprobamos si el botón está presionado

    if (digitalRead(estadoBoton) == HIGH) //Está presionado
    {
    if (digitalRead(estadoled) == HIGH) //Esta encendido
    {
    digitalWrite(led, LOW);// Desactivamos el pin 12 (0V)
    }
    else //Esta apagado
    {
    digitalWrite(led, HIGH); // Activamos el pin 12 (+5V)
    }
    }
    }

    Esta realizado sobre arduino uno. Funciona de forma irregular y huele a quemadillo creo que el problema es de circuito.

    Un saludo y gracias.

Deja una respuesta

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

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies