// github.com/Stutchbury/EncoderButton
// esta configuracao e simples d eimplementar, mas permite apenas 4 encoder usando so pinos digitais ou 6 usando os analógicos
#include <BasicEncoder.h>
#include <TimerOne.h>
#define nenc 2 //number of encoders
BasicEncoder encs[nenc]={{2,3},{5,6}}; //pin adress of encoders
byte vencs[nenc][2]={{0,0},{0,0}}; //values of [encoders] [new_value,previous_value]
byte encb[nenc] = {4,7}; //encoder buttons - assign the 'click' from SW encoder pin
unsigned long time=0; //tempo decorrido desde o inicio do programa: p/ evitar dupla detecção dos switches
void timer_service() { //otimizado
for(byte i=0; i<nenc; i++){
encs[i].service();}
}
void setup() {
Serial.begin(115200);
for(byte i=0; i<nenc; i++){pinMode(encb[i], INPUT_PULLUP);}//all switches as inputs
Timer1.initialize(1000);
Timer1.attachInterrupt(timer_service);
}
void loop() { //otimizado
for(byte i=0; i<nenc ; i++){ //percorre todos os encoders
byte tmp=encs[i].get_change(); //ve o valor de cada um
if (tmp!=0){ vencs[i][1]=vencs[i][0]; vencs[i][0]+=tmp; //se mudou, atualiza e...
Serial.print(encs[i].get_count()); Serial.print(' ');} //depois imprime
if( (digitalRead(encb[i]))==0 && millis()-time>100){
Serial.print("botao pressionado:"); Serial.println(i); //ve se os botoes dos encoders foram pressionados
time=millis();};
}
delay(20); //da um tempinho pro Arduino descansar
}
/* código original 28 linhas
#include <Arduino.h>
#include <BasicEncoder.h>
#include <TimerOne.h>
BasicEncoder encoderA(2, 3);
BasicEncoder encoderB(5, 6);
void timer_service() {
encoderA.service();
encoderB.service();
}
void setup() {
Serial.begin(115200);
Timer1.initialize(1000);
Timer1.attachInterrupt(timer_service);
}
void loop() {
int encoder_a_change = encoderA.get_change();
int encoder_b_change = encoderB.get_change(); //get_change da o valor relativo: sempre 0, +1 ou -1
if (encoder_a_change || encoder_b_change) {
Serial.print(encoderA.get_count());
Serial.print(' ');
Serial.print(encoderB.get_count()); //get_count da o valor absoluto: -5 (gira)=> -6
Serial.println();
}
} //28 linhas*/