// Rotary Encoder ABRAHAM
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define ENCODER_CLK 2
#define ENCODER_DT 3
LiquidCrystal_I2C lcd(0x27, 16, 2);
int pulseCount = 0;
float degrees = 0.0;
const int pulsesPerRevolution = 20;
void setup() {
Serial.begin(62000);
lcd.begin(16, 2);
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Encoder ABRAHAM");
pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
}
int lastClk = HIGH;
void loop() {
int newClk = digitalRead(ENCODER_CLK);
if (newClk != lastClk) {
lastClk = newClk;
int dtValue = digitalRead(ENCODER_DT);
if (newClk == LOW && dtValue == HIGH) {
pulseCount++;
Serial.println("Rotated clockwise ⏩");
}
if (newClk == LOW && dtValue == LOW) {
pulseCount--;
Serial.println("Rotated counterclockwise ⏪");
}
degrees = (pulseCount * 360.0) / pulsesPerRevolution;
Serial.print("Pulse: ");
Serial.print(pulseCount);
Serial.print(" | Degrees: ");
Serial.println(degrees);
lcd.setCursor(0, 1);
lcd.print("P: ");
lcd.print(pulseCount);
lcd.print(" D: ");
lcd.print(degrees);
}
}