#include <Encoder.h>
#define encoderA 2
#define encoderB 3
#define encoderButton 4
Encoder myEncoder(encoderA, encoderB);
boolean buttonState = false;
boolean lastButtonState = false;
boolean fineAdjustMode = false;
byte encoderPassos = 4;
byte mode = 0;
float modes[] = {0.01, 0.10, 1.00};
float corrente = 0.00, salvo = 0.00;
int value, oldValue;
int contadorCliques = 0;
class Botao {
private:
byte pino;
bool estadoAnterior;
unsigned long tempoAnterior;
public:
Botao(byte pino) {
this->pino = pino;
pinMode(pino, INPUT_PULLUP);
estadoAnterior = false;
tempoAnterior = 0;
}
int press(void (*press)(),void (*longPress)()) {
bool estadoBotao = !digitalRead(pino);
unsigned long tempoAtual = millis();
if (estadoBotao && !estadoAnterior && (tempoAtual - tempoAnterior) > 25) {
tempoAnterior = tempoAtual;
//Serial.println("Down");
//press();
}
else if (!estadoBotao && estadoAnterior && (tempoAtual - tempoAnterior) > 25) {
tempoAnterior = tempoAtual;
//Serial.println("Up");
press();
}
else if (estadoBotao ) {
if(tempoAtual - tempoAnterior > 2000){
tempoAnterior = tempoAtual;
//Serial.println("5sec");
longPress();
return;
}
}
estadoAnterior = estadoBotao;
}
};
void inc() {
contadorCliques++;
// Serial.print("Contagem: ");
// Serial.println(contadorCliques);
Serial.println( modes[contadorCliques] );
}
void dec() {
contadorCliques--;
// Serial.print("Contagem: ");
// Serial.println(contadorCliques);
}
void rst(){
//contadorCliques = -1;
// Serial.print("Contagem: 0");
// Serial.println();
salvo = corrente;
Serial.print("salvo ");
Serial.println(salvo);
}
void setup() {
Serial.begin(9600);
}
Botao Ok(encoderButton);
void loop() {
Ok.press(inc, rst);
if(contadorCliques >= 3) contadorCliques = 0;
//Serial.println( modes[contadorCliques] );
value = myEncoder.read();
if(oldValue != value){
oldValue = value;
corrente = ((value/encoderPassos) * modes[contadorCliques] );
Serial.println(corrente);
delay(50);
}
}