Bom dia
Faço curso técnico em mecatrônica, meu professor deu como tarefa desenvolver um contador binário de 3 bits usando a função millis que toda a vez que apertado um botão ele troca o sentido da contagem, consegui desenvolver o código para contagem, o código de debouncing, adaptei do modelo do próprio Arduino, porem não estou conseguindo implantar a função de reversão de contagem.
Se alguem puder me ajudar neste código ficarei muito grato.
/* ========================================================================================================
Curso de Tecnico em Mecatronica
CFP SENAI Ney Damasceno Ferreira
Contador de 3 bit com funcao millis
Aluno: Fabricio Cano Data: Fevereiro de 2019
======================================================================================================== */
//############################################### MAPEAMENTO DE HARWARE ###########################################
#define led1 8
#define led2 9
#define led3 10
#define buttonPin 11 // Numero do pino do botao
//###########################################MAPEAMENTO DE VARIAVEIS #############################3################
int buttonState; // Leitura atual do estado do botao
int lastButtonState = LOW; // Leitura do estado amterior do botao
int buttonPress = LOW;
/*
As variáveis a seguir são unsigned long porque o tempo, medido em milissegundos,
rapidamente se tornará um número maior do que pode ser armazenado em uma variavel int.
*/
unsigned long lastDebounceTime = 0; // a ultima vez que o botao foi acionado
unsigned long debounceDelay = 50; // o tempo de debounce; aumentar se ainda persistir o bounce
long tempo1 = 1;
long tempo2 = 1;
long tempo3 = 1;
int status1 = HIGH;
int status2 = HIGH;
int status3 = HIGH;
void led_increasing();
void led_decreasing();
void setup() {
Serial.begin(9600);
digitalWrite(buttonPin, buttonPress); // define o stado inicial do botao
pinMode(led1,OUTPUT);
pinMode(buttonPin, INPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
}
void loop() {
// coloca o estado do bottao em uma variavel local
int reading = digitalRead(buttonPin);
/*
verifiqua se você acabou de pressionar o botão (ou seja, a entrada passou de LOW para HIGH), e você esperou o tempo suficiente
desde a última vez que pressionamos para ignorar qualquer ruído:
*/
if (reading != lastButtonState) {
// reset the debouncing timer
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
//seja qual for a leitura, se está lá há mais tempo do que o atraso para debounce, então torne-o como estado atual:
// se a leitura do botao mudou:
if (reading != buttonState) {
buttonState = reading;
// inverte o estatus da variavel buttonPress
if (buttonState == HIGH) {
buttonPress = !buttonPress;
}
}
}
// salva a leitura. Na próxima vez que passar pelo loop, será o lastButtonState:
lastButtonState = reading;
Serial.println(buttonPress);
//########################## LED 1 #####################
if((millis()-tempo1)>1000){
tempo1=millis();
if(status1==LOW){
status1=HIGH;
}
else{
status1=LOW;
}
digitalWrite(led1,status1);
}
//########################## LED 2 #####################
if((millis()-tempo2)>2000){
tempo2=millis();
if(status2==LOW){
status2=HIGH;
}
else{
status2=LOW;
}
digitalWrite(led2,status2);
}
//########################## LED 3 #####################
if((millis()-tempo3)>4000){
tempo3=millis();
if(status3==LOW){
status3=HIGH;
}
else{
status3=LOW;
}
digitalWrite(led3,status3);
}
}