Hoy hablamos de la programación de las E/S digitales es una de las partes más sencillas pero a su vez de lo que más utilizamos.
Una E/S Digital solo toma dos valores Alto (en nuestro Arduino se representa por +5V) o Bajo que seran 0V.
El código ejemplo de este POST se encuentra en https://github.com/pinguytaz/Arduino-ESP32/blob/master/CuadernoTecnico/RustArduino/src/bin/digitales.rs y es un ejemplo sencillo que consiste en tener tres leds(salidas digitales) y un botón (entrada digital) de forma que uno parpadea ya que cambia su valor cada vez que pasa por el bucle, y los otros dos cambian según la pulsación del botón:
- Al pulsarlo uno de ellos alterna su valor (enciende o apaga)
- El otro se mantienen encendido mientras tenemos pulsado el botón.
Tenemos 14 pines digitales algunos de ellos tienen otras funciones y algunos se podrán utilizar como salidas PWM que hablaremos en otro POST.
En la tabla A podemos ver su identificador, que utilizaremos en la programación, así como el puerto (es como se agrupan los pines en el Atmega328 y cuenta con 3 «B C y D«) en el caso de las E/S Digitales solo se usan los puertos B y D y las interrupciones que podremos utilizar al hablar de interrupciones externas que se activan al activar el PIN.
Los métodos para utilizar estos pines son los siguientes:
Métodos de estos pines en digital:
- into_output() Define el pin como salida.
- into_output_high() Lo define como salida y lo pone en alto.
- into_floating_input() y into_pull_up_input() Define el pin como entrada, si usamos el segundo método habilita el Pull interno para que no tengamos que montarlo nosotros en nuestro circuito. Por defecto los pines se configuran como entrada.
- is_high() is_low() Comprueba si esta a nivel esta en estado Alto o Bajo.
- toggle() Cambia su estado del pin.
Comentando un poco el código que podemos descargar del enlace anterior, ya que esta programación es muy sencilla. Lo primero que hacemos es configurar los pines
// Obtenemos los pines disponibles en nuestro arduino
let dp = arduino_hal::Peripherals::take().unwrap();
let pins = arduino_hal::pins!(dp);
// Configuramos los pines
let mut led1 = pins.d12.into_output_high(); // El pin digital 12 se define como salida y se pone HIGH
let mut led2 = pins.d11.into_output(); // El pin 11 simplemente se define como salida
let boton = pins.d2; // El pin 2 conectado al botón es una entrada.
Después ya solo nos queda usar los métodos indicados anteriormente para activar/desactivar una salida o comprobar el estado de una entrada
led3.toggle(); // Cambia el estado de una salida.
if boton.is_high() // Comprueba si el estado de una entrada digital esta en alto (+5V)
led2.set_high(); // Pone una salida a Alto (+5V) si estaba ya en alto se mantiene.
led2.set_low(); // En este caso pone la salida a bajo (0V)
Con esto terminamos la segunda parte, recomiendo primero leer el anterior POST «Rust-Embebido «Arduino» Introducción parte 1» y esperar a las siguientes:
- Uso de las entradas analógicas ADC
- Uso de los pines PWM
- Uso de interrupciones externas.
- Timer usando servomotores
- Timer para uso del sonar HC-SR04