En este momento estás viendo Como usar las entradas y salidas digitales

Como usar las entradas y salidas digitales

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.

Deja una respuesta