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:

Componentes
Cantidad
Observaciones

ESP32

1

KY-021 MINI SWITCH

1

Conexi贸n

La conexi贸n entre el sensor de ultrasonido se muestra en la siguiente tabla:

ESP32
DS1307

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

  1. Configurar en Platformio la plataforma a emplear eligiendo como dispositivo el ESP32 tal y como se resume en la siguiente tabla:

Parametro
Valor

Name

Nombre del proyecto (ESP32-DS1307)

Board

NodeMCU-32S (Board disponible en el laboratorio)

Framework

Arduino (Es el que hemos manejado)

  1. 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