#define led_SW 25
#define SW 8
#define CLK 6
#define DT 7
void setup() {
Serial.begin(9600);
pinMode(SW, INPUT_PULLUP);
pinMode(led_SW, OUTPUT);
pinMode(CLK, INPUT);
pinMode(DT, INPUT);
}
int lastCLK = HIGH; // Pois o CLK sempre começa HIGH
int count = 1;
void loop() {
digitalWrite(led_SW, !digitalRead(SW)); /* Ele liga o LED se o
botão do Encoder estiver apertado */
int newCLK = digitalRead(CLK);
if (newCLK != lastCLK) { // Aqui ele só detecta quando ocorre mudança
lastCLK = newCLK;
int newDT = digitalRead(DT);
if (newCLK == 0 && newDT == 1) {
Serial.println("Horário!");
count++;
}
if (newCLK == 0 && newDT == 0) {
Serial.println("Anti-horário!");
count--;
if (count < 1) {
count = count + 20;
}
}
if (count == 21 || count > 20) { // O Encoder KY-040 tem 20 cliques por volta
// +- 18 graus por clique, assim eu consigo uma lista de 20 caracteres
count = 1;
}
Serial.println(count); // Irá mostrar de 1 a 20, ative para debug
}
delay(2); // Pra não travar
}