ARD03 – Entrada y salida

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

En el artículo anterior hemos visto como Arduino, una vez programado, controla el LED. Aquí vamos a hacer un montaje muy sencillo, con un comportamiento muy simple, para ilustrar como Arduino puede leer información procedente del exterior, y operar en consecuencia.

MONTANDO UN PULSADOR

Figura 3.1. Un pulsador normalizado para C.Imp. o Protoboard

Figura 3.1. Un pulsador normalizado para C.Imp. o Protoboard

La información procederá de un pulsador sobre el que actuaremos manualmente, aunque podría proceder de cualquier otro tipo de sensor. Se pueden usar conmutadores, sensores de luz, de humedad… En otros artículos veremos algunos de estos tipos, pero en este ejercicio usaremos un simple pulsador, por claridad didáctica.

En la figura 3.1 vemos una fotografía ampliada del pulsador que emplearemos aquí. Al oprimir el botón, una plaquita metálica interior cierra un circuito entre las patas del pulsador.

Cuando uses un pulsador como este, recuerda que los terminales que cierran circuito al pulsar son los que se encuentran más próximos entre sí, como se detalla en la figura 3.2.

Figura 3.2. El patillaje que se cierra al pulsar.

Figura 3.2. El patillaje que se cierra al pulsar.

El circuito que vamos a montar obedece al siguiente esquema electrónico teórico (Figura 3.3).

Figura 3.3. Esquema teórico del montaje de este artículo.

Figura 3.3. Esquema teórico del montaje de este artículo.

Lo que vamos a hacer es un montaje con un comportamiento muy simple: al pulsar el botón se enciende el led y al soltarlo se apaga. En realidad, para hacer una cosa así no necesitaríamos ni siquiera a Arduino. El objetivo de este montaje es entender como se programa y comporta una entrada digital en esta placa, concepto que necesitaremos, más adelante, para ejercicios más interesantes.

EL CIRCUITO

Hemos visto el esquema electrónico del circuito. Si estás familiarizado con los esquemas que se emplean en electrónica verás lo simple que es. Todo se capta al primer golpe de vista. En la figura 3.4 ves el montaje físico con la placa Arduino y la protoboard.

Figura 3.4. El montaje cableado de este artículo.

Figura 3.4. El montaje cableado de este artículo.

En los primeros montajes que hagamos, estas imágenes pueden ayudarte a ver como plasmamos el esquema electrónico teórico en nuestro Arduino.

EL SKETCH

Arduino siempre debe ser programado para que haga lo que nosotros queremos. El circuito que acabamos de montar, sin el sketch adecuado, no funcionará nunca. Ya sabemos como escribir un sketch en el IDE de Arduino, y como cargarlo en la placa. Vemos el listado del sketch de este capítulo.

Empecemos por fijarnos en la primera parte.

int const LED = 8;
int const PULSADOR = 7;
int pulsado = 0;

Definimos una constante a la que llamamos LED con el valor entero 8. Esta representará, luego, la salida de señal para el LED.

También definimos una constante llamada PULSADOR con el valor entero 7. Se referirá luego al pin por el que va a entrar la señal del pulsador.

Por último, definimos una variable llamada pulsado, que reflejará el estado del pulsador. Asumiremos que vale 0 en reposo y 1 cuando esté pulsado. Inicialmente la ponemos a 0. Esto es la forma en que funciona el sistema binario (electrónica digital, informatica… todo es binario). El sistema binario solo admite dos estados: al desactivado, también conocido como 0 o LOW, y el activado, conocido como 1 o HIGH, como hemos visto en el artículo anterior.

A continuación encontramos la sección setup, reproducida a continuación:

void setup() {
    pinMode (LED, OUTPUT);
    pinMode (PULSADOR, INPUT);
}

Una vez más, recurrimos a la instrucción pinMode. En esta ocasión la empleamos dos veces. La primera para indicar que el pin 8 (el representado por la constante LED) será de salida. En la segunda línea indicamos que el pin 7 (representado por la constante PULSADOR será de entrada. Es decir, Arduino deberá “escuchar” lo que dice el pin 7 y “hablar” por el pin 8. Insisto. Esta sección, al igual que la anterior, solo se ejecuta una única vez al principio del ciclo de vida del sketch. Lo que hay en ella ya queda definido hasta que carguemos otro sketch diferente en la placa.

Por último, veamos como actúa la sección loop que, como sabemos, se ejecuta de principio a fin y vuelve al principio otra vez, repitiéndose indefinidamente durante toda el ciclo de vida del sketch.

void loop() {
    pulsado = digitalRead(PULSADOR);
    if (pulsado == 0) {
        digitalWrite(LED, LOW);
    } else {
        digitalWrite(LED, HIGH);
    }
}

Lo primero que hace es leer el valor del pin 7, y asignarlo a la variable pulsado. Si el pulsador está en reposo, esta variable recibirá un 0. Si está pulsado, vemos en el esquema que el cable del pìn 7 queda conectado, físicamente, al positivo de 5V, así que la variable recibirá un 1. Para ello empleamos la instrucción digitalRead. Esta es similar a digitalWrite, que ya conocemos del artículo anterior, pero, en este caso, solo recibe un argumento: el pin del que tiene que leer el valor digital que buscamos.

Despúes, mediante un condicional, comprobamos si la variable es 1 o 0. En caso de que sea 0, mandamos una señal LOW al pin del LED. En caso contrario, mandamos una señal HIGH a dicho pin.

Una vez más, el código de esta sección puede optimizarse así:

void loop() {
    pulsado = digitalRead(PULSADOR);
    digitalWrite(LED, pulsado);
}

Pruébalo y verás que funciona igual que el original, aunque con menos líneas. La optimización es importante. En estos primeros códigos estamos empleando muy pocas intrucciones pero, cuando los listados sean más largos y complejos, agradecerás haber desarrollado habilidades de optimización.

     

Deja un comentario

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