Нужна помощь со скетчем

skifsogra
Offline
Зарегистрирован: 12.04.2017

Вообщем я решил сделать счетчик отжиманий на ардуино при помощи 7-сигментного индикатора на TM1637, когда нажимаю кнопку всё считает хорошо, но когда зажимаю кнопку он считает дальше, помогите это исправить. Я не силён в этом, прошу помочь.

Скетч:

#define DISPLAY_CLK_PIN 8        

#define DISPLAY_DIO_PIN 9       
#include "TM1637.h"         
#define Btn_1  7    
#define Btn_2  6    
#define ledPin 13    
 
TM1637 display(DISPLAY_CLK_PIN, DISPLAY_DIO_PIN);
 
unsigned char A=0;         
unsigned char B=0;         
unsigned char dots=0;         
 
void setup()
 
{
  display.set(6);  
   
  pinMode(Btn_1, INPUT_PULLUP);  
  pinMode(Btn_2, INPUT_PULLUP);  
  pinMode(ledPin, OUTPUT);      
}
 
 
void loop()
 
{
  action_buttons();
  displey();
}
 
 
void action_buttons()
 
{
   if (digitalRead(Btn_1)==LOW){delay (1000), A++;}
   if (digitalRead(Btn_2)==LOW){delay (1000), B++;}
}
 
 
void displey()
 
{
   int8_t timeDisp[4];         
   timeDisp[0] = A / 10;    
   timeDisp[1] = A % 10;    
   timeDisp[2] = B / 10;  
   timeDisp[3] = B % 10;  
   
   display.display(timeDisp);  
   display.point(dots ==0 ? POINT_OFF : POINT_ON);
}
 
JasKo
Offline
Зарегистрирован: 21.11.2015

skifsogra пишет:

...

   if (digitalRead(Btn_1)==LOW){delay (1000), A++;}
   if (digitalRead(Btn_2)==LOW){delay (1000), B++;}
...

Вот тут твоя проблема.

 

Вот так будет лучше 

#define DISPLAY_CLK_PIN 8        

#define DISPLAY_DIO_PIN 9       
#include "TM1637.h"         
#define Btn_1  7    
#define Btn_2  6    
#define ledPin 13    
 
TM1637 display(DISPLAY_CLK_PIN, DISPLAY_DIO_PIN);
 
unsigned char A=0;         
unsigned char B=0;         
unsigned char dots=0;         

class MyButton { 
    uint8_t _buttonPin;
    uint8_t State = 0;
    uint8_t lastButtonState = HIGH;
    unsigned long lastDebounceTime = 0;
  public:
    MyButton(uint8_t pin) {
      _buttonPin = pin;
      pinMode(_buttonPin, INPUT_PULLUP);
    }
    byte Read(void) { 
      uint8_t reading = digitalRead(_buttonPin);
      if (State == 0 && reading == !lastButtonState) {
        lastDebounceTime = millis();
        State = 1;
      } else  if (State == 1 && reading == LOW && lastButtonState == LOW && (millis() - lastDebounceTime) > 5) {
        State = 0;
        return 1;
      }
      lastButtonState = reading;
      return 0;
    }
};

MyButton button_1(Btn_1);
MyButton button_2(Btn_2);

void setup()
 
{
  display.set(6);  
   

  pinMode(ledPin, OUTPUT);      
}
 
 
void loop()
 
{
  action_buttons();
  displey();
}
 
 
void action_buttons()
 
{
   if (button_1.Read()){A++;}
   if (button_2.Read()){B++;}
}
 
 
void displey()
 
{
   int8_t timeDisp[4];         
   timeDisp[0] = A / 10;    
   timeDisp[1] = A % 10;    
   timeDisp[2] = B / 10;  
   timeDisp[3] = B % 10;  
   
   display.display(timeDisp);  
   display.point(dots ==0 ? POINT_OFF : POINT_ON);
}

 

skifsogra
Offline
Зарегистрирован: 12.04.2017

Спасибо большое за помощь! Всё работает!