Cuando iniciamos con Arduino nos preguntamos ¿Cómo usar las entradas y salidas digitales en Arduino?
El uso de los puertos de entrada y salida digitales es bastante sencillo. Se usan básicamente 3 funciones.
Configura los pines con pinMode()
Con pinmode() configura un pin digital como entrada o como salida de corriente. Esto es necesario ya que podemos decidir cómo funcionara cada pin, si como entrada o como salida. Es por ello que esta función se suele escribir dentro de setup(). No tiene valor de retorno. Y su sintaxis es muy sencilla:
pinMode(pin,tipo); Donde pin: es el número de pin digital (0,1,…13) o podemos usar los analógicos (A0, A1,…A5) tipo: INPUT, OUTPUT, o INPUT_PULLUP
INPUT define el pin como entrada digital, OUTPUT como salida y adicionalmente tenemos la opción de usar un pin digital como entrada con una resistencia resistencia pull-up de 20 KΩ que todo pin digital incorpora. Para ello, se ha de utilizar la constante predefinida INPUT_PULLUP en vez de INPUT.
Escribe en un pin de salida con digitalWrite()
La función digitalWrite() envía un valor ALTO (HIGH) o BAJO (LOW) a un pin digital. El pin al que se le envía la señal se especifica como primer parámetro (escribiendo su número) y el valor concreto de esta señal se especifica como segundo parámetro (escribiendo las constantes predefinidas HIGH o LOW). La sintaxis es como sigue:
digitalWrite(pin,valor); Donde pin: es el número de pin digital (0,1,…13) o podemos usar los analógicos (A0, A1,…A5) valor: es HIGH (1) o LOW (0)
Si el pin especificado en digitalWrite() está configurado como salida, la constante HIGH equivale colocar en ese pin de salida 5 V (o bien 3,3 V en las placas que trabajen a ese voltaje) y la constante LOW equivale a una señal de salida de 0 V. Cada pin digital tiene una capacidad de corriente de hasta 40mA.
Lee tus pines de entrada con digitalRead()
Y la función digitalRead() devuelve el valor leído de un pin digital. Este valor de retorno es de tipo int y puede tener dos únicos valores un 1 o un 0. La sintaxis es la siguiente:
digitalRead(pin); Donde pin: es el número de pin digital (0,1,…13) o podemos usar los analógicos (A0, A1,…A5)
Si la entrada es de tipo INPUT, el valor HIGH se corresponde con una señal de entrada mayor de 3 V y el valor LOW con una señal menor de 2 V.
Si la entrada es de tipo INPUT_PULLUP, al tener la entrada conectada una resistencia “pull-up”, las lecturas son al revés: el valor HIGH indica que no se recibe señal de entrada y el valor LOW que sí.
Configuración pull-up/pull-down
En la configuración pull-Up el voltaje de salida (Vout) es 1 (5V) cuando el pulsador no esta presionado, y 0 (0V) cuando si lo esta. Y en la configuracion Pull-Down el voltaje de salida es 0 (0V) cuando no esta presionado el pulsador y 1 (5V) cuando si lo esta. Este voltaje de salida es el que leería el pin de entrada digital.
Si configuramos una entrada como INPUT_PULLUP se activa una resistencia interna del microcontrolador conectada entre el pin de entrada y 5V, similar a R1.
Configuración Sinking/Sourcing
La configuracion Sinking/Sourcing se refiere a si de la salida digital entra o sale corriente, en la configuración Sourcing la corriente sale del pin digital, y en la configuracion Sinking la corriente entra.
Veamos un par de ejemplos muy sencillos de cómo utilizar los pines de entrada y salida digitales.
Ejemplo 1
void setup(){ pinMode(4,OUTPUT); //Configuramos el pin 4 como salida, donde está conectado un LED. } void loop(){ digitalWrite(4,HIGH); //Decimos que se encienda el LED delay(1000); //Esperamos un segundo (1000ms) digitalWrite(4,LOW); //Decimos que se apague el LED delay(1000); //Esperamos un segundo }
Ejemplo 2
int estadoBoton=0; //Guardará el estado del botón (HIGH ó LOW) void setup(){ pinMode(4,OUTPUT); //Donde está conectado el LED pinMode(8,INPUT); //Donde está conectado el pulsador } void loop() { estadoBoton=digitalRead(8); //Lee el estado del pin 8 if (estadoBoton == HIGH) { //Si se detecta que el botón está pulsado, se enciende el LED digitalWrite(4,HIGH); } else { //Si no esta pulsado lo apaga digitalWrite(4,LOW); } }
Ejercicios
Para realizar los ejercicios utilizaremos el siguiente circuito
Ejercicio 1: Encender un led
Hacer que los tres leds se enciendan mientras este presionado el pulsador.
Ejercicio 2: Titilar
Hacer que uno o varios leds titilen una vez pulsado el botón.
Ejercicio 3: Rotando luces
Hacer que los leds se vayan encendiendo de forma secuencial (rojo, amarillo, verde, rojo amarillo, verde,….) uno a la vez y de forma continua, se inicia cuando se presione el pulsador.
Ejercicio 4: Semáforo
Hacer que el conjunto de los tres leds se comporten como un semáforo.
Ejercicio 5: Cambio de estado
Hacer que los leds se enciendan al pulsar el botón, y se apaguen al volverlo a pulsar.