//Autor: [Fiallos Alex]
//Carrera: [Ingenieria Mecatrónica-UIDE]
const int encoderPinA = 2; // Pin A del encoder conectado al pin 2 del Arduino
const int encoderPinB = 3; // Pin B del encoder conectado al pin 3 del Arduino
volatile int encoderPos = 0; // Variable para almacenar la posición del encoder
volatile boolean aSetLast = false;// Estas variables se inicializan en false, para que puedan detectar el primer
volatile boolean bSetLast = false;// cambio de posicion correctamente
void setup() {
pinMode(encoderPinA, INPUT);//Se configuran los pines como entradas
pinMode(encoderPinB, INPUT);
attachInterrupt(digitalPinToInterrupt(encoderPinA), updateEncoder, CHANGE); //le dice al Arduino que ejecute la función updateEncoder
//cada vez que haya un cambio en el pin A del encoder, lo que permite al programa detectar los movimientos del encoder
Serial.begin(9600); // Iniciar la comunicación serial a 9600 baudios
}
void loop() {
// Este void loop se encuentra aqui, ya que permite que el programa se ejecute continuamente
}
void updateEncoder() {
boolean aSet = digitalRead(encoderPinA); // Leer el estado actual del pin A del encoder
boolean bSet = digitalRead(encoderPinB); // Leer el estado actual del pin B del encoder
if (!aSetLast && aSet) { // Verificar si hay un cambio de bajo a alto en el pin A del encoder
if (bSet && !bSetLast) { // Si el pin B está alto y era bajo anteriormente, significa que el encoder gira en sentido horario
encoderPos--; // Decrementar la posición del encoder
}
else if (!bSet && bSetLast) { // Si el pin B está bajo y era alto anteriormente, significa que el encoder gira en sentido antihorario
encoderPos++; // Incrementar la posición del encoder
}
}
aSetLast = aSet; // Actualizar el estado anterior del pin A para la próxima comparación
bSetLast = bSet; // Actualizar el estado anterior del pin B para la próxima comparación
Serial.print("Posicion: ");
Serial.println(encoderPos); // Mostrar la posición actual del encoder en el monitor serial
static int previousPos = encoderPos; // Variable estática para almacenar la posición anterior del encoder
if (encoderPos < previousPos) { // Verificar si la posición actual es menor que la posición anterior
Serial.println("Disminuye"); // Mostrar "Disminuye" en el monitor serial si la posición disminuye
}
else if (encoderPos > previousPos) { // Verificar si la posición actual es mayor que la posición anterior
Serial.println("Incrementa"); // Mostrar "Incrementa" en el monitor serial si la posición aumenta
}
previousPos = encoderPos; // Actualizar la posición anterior del encoder para la próxima comparación
}