Ejemplo 8
Uso del Rotary encoder...
Descripci贸n
Este ejemplo en construcci贸n ...
Componentes
La siguiente tabla muestra los componentes principales del circuito a montar:
ESP32
1
KY-021 MINI SWITCH
1
Disponible en el 37 sensor Kit. Para mas informaci贸n sobre este puede consultar la pagina KY-021 MINI MAGNETIC REED SWITCH MODULE (link)
Conexi贸n
La conexi贸n entre el sensor de ultrasonido se muestra en la siguiente tabla:
GND
GND
5V
VCC
GPIO21
SDA
GPIO22
SCL
Esquematico
A continuaci贸n se muestra el esquematico del circuito:

Conexi贸n
A continuaci贸n se muestra la conexi贸n entre los componentes:

Archivo Fritzing
Pasos previos si se usa platformio
Configurar en Platformio la plataforma a emplear eligiendo como dispositivo el ESP32 tal y como se resume en la siguiente tabla:
Name
Nombre del proyecto (ESP32-DS1307)
Board
NodeMCU-32S (Board disponible en el laboratorio)
Framework
Arduino (Es el que hemos manejado)
Agregue las librerias necesarias: En este caso se instalo la libreria RTClib de adafruit

Al final el archivo platformio.ini quedo configurado de la siguiente manera:
[env:nodemcu-32s]
platform = espressif32
board = nodemcu-32s
framework = arduino
Programa (implementado en el IDE de Arduino)
A continuaci贸n se muestra el programa que se ejecuta en el ESP32. Si este se hubiese implementado en platformio adicionalmente el main.cpp tendria incluida la libreria al principio:
#include <Arduino.h>
En nuestro ejemplo como la implementaci贸n se hizo en el IDE de Arduino no se incluye esta libreria de modo que queda como se muestra a continuaci贸n.
#include <Arduino.h>
/* ---- Pines I/O ---- */
// Rotary encoder Encoder (I)
#define ENCODER_CLK 14
#define ENCODER_DT 12
#define ENCODER_SW 13
#define DEBUG 1
// Constantes
const char MAX_PUSH_TIME = 100;
// Variables aplicacion
unsigned char counter = 0; // Brillo led integrado
int lastClk = HIGH; // Valor anterior se帽al CLK
long int resetLastChanged = 0; // cambio reset
/* ---- Inicializaci贸n ---- */
void setup() {
// Inicializacion serial
Serial.begin(115200);
// Inicializacion I/O
pinMode(LED_BUILTIN,OUTPUT);
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_SW, INPUT_PULLUP);
// Impresion en el monitor serial
#if DEBUG
Serial.print("Counter: ");
Serial.println(counter);
#endif
}
/* ---- Loop infinito ---- */
void loop() {
// Chequeo del reset presionado por un tiempo mayor de MAX_PUSH_TIME
if (digitalRead(ENCODER_SW) == LOW && millis() - resetLastChanged > MAX_PUSH_TIME) {
resetLastChanged = millis();
counter = 0;
#if DEBUG
Serial.print("Counter [Reset]: ");
Serial.println(counter);
#endif
analogWrite(LED_BUILTIN,counter);
}
// Actualizancion del brillo
int newClk = digitalRead(ENCODER_CLK);
if (newClk != lastClk) {
// There was a change on the CLK pin
lastClk = newClk;
int dtValue = digitalRead(ENCODER_DT);
if (newClk == LOW && dtValue == HIGH) {
// Aumento brillo
counter++;
#if DEBUG
Serial.print("Counter [Up]: ");
Serial.println(counter);
#endif
}
if (newClk == LOW && dtValue == LOW) {
// Disminuci贸n brillo
counter--;
#if DEBUG
Serial.print("Counter [Down]: ");
Serial.println(counter);
#endif
}
analogWrite(LED_BUILTIN,counter);
}
}
Prueba de funcionamiento
La siguiente figura muestra la salida en el monitor serial cuando el programa es ejecutado:

Componentes importados
... Componente del rotator se invoco del siguiente link: https://forum.fritzing.org/t/ky-040-rotary-encoder-breakout-board-part/11073
... Simulaci贸n en el siguiente enlace: https://wokwi.com/projects/367656993429289985
Referencias
Last updated