miércoles, 6 de diciembre de 2023

Proyecto prueba de librerías Button2 & ESPRotary

Buscando información para un futuro proyecto que tengo en mente me encontré con dos librerías muy interesantes creadas por Lennart Hennigs.

La primera llamada Button2:

“Esta biblioteca le permite utilizar funciones de devolución de llamada para realizar un seguimiento de clics simples, dobles, triples y largos (…) La biblioteca también se encarga de evitar rebotes. El uso de esta biblioteca reducirá y simplificará significativamente su código…”
(Fuente, traducido con google translate)

La segunda llamada ESPRotary:

“Esta biblioteca le permite leer interacciones con un codificador rotatorio y actuar en consecuencia. Utiliza funciones de devolución de llamada para recibir notificaciones cuando cambia [el estado de] el codificador rotatorio.” (Fuente, traducido con google translate)

Según el autor, ambas librerías fueron testeadas en placas: Arduino, ESP8266 y ESP32 y pueden descargarse desde el Administrador de Bibliotecas del IDE de Arduino.

Dado que seguramente las usaré en proyectos futuros me pareció una buena idea armar un proyecto simple para mostrar su funcionamiento. El uso de las mismas es muy sencillo y realmente facilitan tareas cuando se utiliza un pulsador o un rotary encoder. Respecto al primero no tendremos que preocuparnos por los rebotes ni la detección de doble pulsado, etc… y respecto al segundo no tendremos que andar escribiendo líneas y líneas de código para andar detectando la orientación del encoder.

“Los rebotes son las falsas pulsaciones (ruido) que se producen al hacer falsos contactos en el interruptor. El proceso de eliminarlos se llama Debounce.” (fuente y más información aquí)

Creo que en el video se muestra claramente en qué consiste el proyecto y como utilizaremos los distintos componentes. Los cuales son:

  1. Arduino UNO (o compatible)
  2. Rueda Neopixel de 12 leds.
  3. Módulo KY-040 Rotary Encoder.
  4. Breadboard y cables jumper.

Por recomendación de la página de NeoPixel hay conectado un condensador de 100uF en la alimentación de la rueda. [Editado: Veo que el condensador está conectado en toda la línea + y GND del breadboard, mantengo igualmente la sugerencia.]

Las conexiones son las siguientes:

Rueda LED Arduino
GND GND
PWR / VCC 5v
D1 / IN Pin D7

Módulo KY-040 Arduino
CLK Pin D3
DT Pin D4
SW Pin D6
VCC / + 5v
GND GND

Como siempre el código está bastante comentado para que se pueda ir siguiendo y entendiendo paso a paso lo que se está haciendo.

Lo que me interesa destacar es el uso de las funciones de retorno de llamada (callback functions) dado que así interactuamos con las funciones que nos ofrecen las librerías.

Una función de callback es una función que se pasa a otra función como un argumento, que luego se invoca dentro de la función externa para completar algún tipo de rutina o acción. (Fuente)

Esta definición puede ser un poco confusa, pero en la práctica es muy sencillo.

pulsador.setClickHandler(pulsado); 
pulsador.setLongClickDetectedHandler(pulsado_largo); 
encoder.setChangedHandler(rotacion); 
encoder.setLeftRotationHandler(mostrar_direccion);
encoder.setRightRotationHandler(mostrar_direccion);
encoder.setLowerOverflowHandler(tope_inferior); 
encoder.setUpperOverflowHandler(tope_superior);

Dentro del sketch se puede observar más claramente el uso de cada una; por ej. cuando se produce una pulsación “pulsador.setClickHandler(pulsado)“ se llama a la función “pulsado“ que definiremos más abajo. La segunda refiere a una pulsación larga y llama a la función pulsado_largo, la tercera cuando se detecte una cambio de posición en el encoder, la cuarta y quinta llamarán a las funciones que designemos cuando el encoder gire hacia un lado u otro y las últimas dos cuando nos topemos con el límite establecido de valores que puede tomar el encoder.

Las librerías contienen más funciones de las que ejemplifico en el proyecto, por eso les recomiendo leer la documentación respectiva a cada librería (ambas se pueden encontrar en el link del autor al comienzo del post) pero creo que en el sketch se pueden apreciar las más básicas.

Si te resultaron de utilidad no dudes en dejar una estrella en el repositorio del autor. Y si te gustó este proyecto no dudes en dejar un mensaje y compartir.

Link al sketch: https://gist.github.com/mcattani/c1a235bd2c94b32297c30ca34e2ef046

Saludos!