Нужна помощь со скетчем
- Войдите на сайт для отправки комментариев
Ср, 12/04/2017 - 16:51
Вообщем я решил сделать счетчик отжиманий на ардуино при помощи 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);
}
...
Вот тут твоя проблема.
Вот так будет лучше
#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); }Спасибо большое за помощь! Всё работает!