#include <Adafruit_SH110X.h>
#include <Wire.h>
#include <ESP32Encoder.h>
//ENCODER
// Señal A = CLK
// Señal B = DT
// Señal C = SW
//Definición de variables a nivel de pre-compilación
#define LED 25 //el num se refiere al PIN q va conectado
#define A 18
#define B 5
#define C 19
void updateDisplay(int n, bool sentido, int led);
Adafruit_SH1106G display = Adafruit_SH1106G(128, 64, &Wire, -1);
ESP32Encoder enc; //en este caso la variable se crea con el constructor por defecto
int anterior = 0, estadoLed = LOW; //LOW representa un 0
bool sentido = false;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(LED, OUTPUT);
pinMode(C, INPUT_PULLUP);
display.begin(0x3C, true);
display.setTextColor(SH110X_WHITE);
//Inicializando el Encoder
enc.attachSingleEdge(A,B); //Definiendo la interrupción para analizar los cambios de estado de esos pines
enc.setCount(0); //pasos = 0
}
void loop() {
// put your main code here, to run repeatedly:
int n = enc.getCount();
if (n > anterior){
sentido = true;
}
else if(n < anterior){
sentido = false;
}
if(digitalRead(C) == LOW) {
estadoLed = digitalRead(LED);
//digitalWrite(LED, !estadoLed); ES LO MISMO Q LO DE ABAJO PERO MAS CORTO
if(estadoLed == LOW){
digitalWrite(LED, HIGH);
}
else {
digitalWrite(LED, LOW);
}
}
updateDisplay(n, sentido, estadoLed);
anterior = n;
delay(10); // this speeds up the simulation
}
void updateDisplay(int n, bool sentido, int led){
display.clearDisplay();
display.setCursor(0,0);
display.printf("Pasos: %d\nSentido: %s\nLED: %s", n, (sentido?"Horario":"ANTI-HORARIO"), (led == 0?"ON": "OFF"));
display.display();
}