Проблема аппаратная или програмная? Неправильно считает время между нажатиями кнопки!?

Игорь0215

✩✩✩✩✩✩✩
20 Мар 2024
7
0
Оформи код соответствующим тэгом, см. Правила
Помогите пожалуйста разобраться. Проблема аппаратная или програмная? Arduino Uno
Неправильно считает время между нажатиями кнопки!?
Задача считать время между нажатиями кнопки. Получаемый результат в разы отличается от времени по секундомеру?!
Заранее спасибо

C++:
const int buttonPin = 2;     // номер пина, к которому подключена кнопка

unsigned long previousTime = 0; // время предыдущего нажатия

void setup() {

  pinMode(buttonPin, INPUT_PULLUP);

  Serial.begin(9600);

}

void loop() {

  int buttonState = digitalRead(buttonPin);

 

  // Если кнопка нажата

  if (buttonState == LOW) {

        unsigned long currentTime = millis(); // текущее время

    if (previousTime > 0) {

      // Если это не первое нажатие, вычисляем и выводим время между нажатиями

      Serial.print("Time between clicks: ");

      Serial.print((currentTime - previousTime)/1000);

      Serial.println(" sec");

    }

    previousTime = currentTime; // обновляем время предыдущего нажатия

    // Ждем, пока кнопка будет отпущена

    while (digitalRead(buttonPin) == LOW) {}

  }

}
 
Изменено:

Сотнег

★★★★★★★
15 Янв 2020
4,365
1,494
@Игорь0215,
а конкретней?
Лог бы показали и свои замеры в него добавили.

И в вашем коде нет места для устранения дребезга.
 

Игорь0215

✩✩✩✩✩✩✩
20 Мар 2024
7
0
Про дребезг знаю. Решается delay(20);

// Если кнопка нажата
if (buttonState == LOW) {
delay(20); --------------------------------------------------------
unsigned long currentTime = millis();

Результат замеров:
Факт 4сек Serial monitor 1 сек (1573 мс)
Факт 10сек Serial monitor 5 сек (5232 мс)
Факт 40сек Serial monitor 18сек (17879 мс)

Четкой зависимости нет
 

Сотнег

★★★★★★★
15 Янв 2020
4,365
1,494
@Игорь0215,
так вставьте свой delay, только ещё раз в конце после while.
И не 20, наверное, а 50.

В остальном код должен работать, и с платой проблему искать смысла нет.
Найдёте свои потерянные секунды, если добавите в код вывод ежесекундной отбивки.