#include <Servo.h>
// Entradas del encoder rotatorio
#define CLK 2
#define DT 3
Servo servo;
int counter = 0;
int currentStateCLK;
int lastStateCLK;
void setup() {
// Coloca los pines del encoder como entradas
pinMode(CLK,INPUT);
pinMode(DT,INPUT);
// Configura el monitor serial
Serial.begin(9600);
// Coloca el pin PWM 9 para controlar el servomotor
servo.attach(9);
servo.write(counter);
// Lee el estado inicial de CLK
lastStateCLK = digitalRead(CLK);
}
void loop() {
// Lee el estado actual de CLK
currentStateCLK = digitalRead(CLK);
// Si el estado actual y anterior de CLK son diferentes, entonces ocurre el pulso
// Reacciona a un solo cambio de estado para evitar conteo doble
if (currentStateCLK != lastStateCLK && currentStateCLK == 1){
// Si el estado de DT es diferente a CLK entonces
// Si el encoder rota en sentido horario decrementa
if (digitalRead(DT) != currentStateCLK) {
counter --;
if (counter<0)
counter=0;
} else {
// Si el encoder rota en sentido anti horario incrementa
counter ++;
if (counter>120)
counter=120;
}
// Mueve el servo
servo.write(counter);
Serial.print("Position: ");
Serial.println(counter);
}
// Recuerda el último estado de CLK
lastStateCLK = currentStateCLK;
}