#include <Encoder.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Definir os pinos do encoder
#define ENCODER_PIN_A 2
#define ENCODER_PIN_B 3
// Criar uma instância do encoder
Encoder encoder(ENCODER_PIN_A, ENCODER_PIN_B);
// Criar uma instância do display LCD I2C (endereço 0x27 e 20 colunas x 4 linhas)
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Contadores de pulsos
long oldPosition = 0;
long newPosition = 0;
long pulseCount = 0;
// Fatores de conversão
const float pulsesPerMicrometer = 4.0; // 4 pulsos por micrômetro
const float micrometersPerPulse = 1.0 / pulsesPerMicrometer;
const float micrometersPerMillimeter = 1000.0;
const float micrometersPerCentimeter = 10000.0;
void setup() {
// Inicializar o display LCD com o número de colunas e linhas
lcd.begin(20, 4);
// Inicializar a luz de fundo do display
lcd.backlight();
// Inicializar o encoder
encoder.write(0);
// Inicializar comunicação serial para depuração
Serial.begin(9600);
}
void loop() {
// Ler a nova posição do encoder
newPosition = encoder.read();
// Calcular a diferença de pulsos
long pulseDelta = newPosition - oldPosition;
// Atualizar o contador de pulsos
pulseCount += pulseDelta;
// Mostrar a posição em micrômetros, milímetros e centímetros
float micrometers = pulseCount * micrometersPerPulse;
float millimeters = micrometers / micrometersPerMillimeter;
float centimeters = micrometers / micrometersPerCentimeter;
// Limpar o display e imprimir os valores
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Medidas ");
lcd.setCursor(0, 1);
lcd.print("Micro: ");
lcd.print(micrometers);
lcd.print("u");
lcd.setCursor(0, 2);
lcd.print("Mili : ");
lcd.print(millimeters);
lcd.print("mm");
lcd.setCursor(0, 3);
lcd.print("Centi: ");
lcd.print(centimeters);
lcd.print("cm");
// Atualizar a posição antiga
oldPosition = newPosition;
// Adicionar um pequeno delay para evitar a sobrecarga do processador
delay(100); // Ajustei o delay para 100 ms para melhor leitura
}