Rust-Embebido «Arduino» E/S Digitales parte 2

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

Deja una respuesta

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

Información básica sobre protección de datos Ver más

  • Responsable: Javier.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a Hostinger.es que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Ver
Privacidad