текущийстатускнопки

Я пытаюсь использовать кнопки мгновенного нажатия для переключения двухцветного светодиода между КРАСНЫМ и ЗЕЛЕНЫМ. У меня есть один рабочий, но когда я пытаюсь адаптировать код для большего количества кнопок, он не работает. Я просто меняю номера кнопок (которые определены).
Компилируется и загружается без ошибок.

void loop() {
  byte currentButton1Status = digitalRead(button1);
  if (currentButton1Status == button1Status)
    lastEqualButtonTime = millis();
  else if ((millis() - lastEqualButtonTime) > debounceTimeMs)
  {
    lastEqualButtonTime = millis();
    button1Status = currentButton1Status;

    if (button1Status == LOW) {
      digitalWrite(17, !digitalRead(17));
      digitalWrite(16, !digitalRead(16));
    }
  }

  byte currentButton2Status = digitalRead(button2);
  if (currentButton2Status == button2Status)
    lastEqualButtonTime = millis();
  else if ((millis() - lastEqualButtonTime) > debounceTimeMs)
  {
    lastEqualButtonTime = millis();
    button2Status = currentButton2Status;

    if (button2Status == LOW) {
      digitalWrite(15, !digitalRead(15));
      digitalWrite(14, !digitalRead(14));
    }
  }    
}

, 👍-3

Обсуждение

пожалуйста, опубликуйте полный код... в том виде, в котором он есть сейчас, не хватает нескольких определений, @jsotola

Возможно, вам стоит рассмотреть возможность использования библиотеки debounce, например https://github.com/thomasfredericks/Bounce2, @Craig

«Это не работает» — не лучшее описание проблемы., @chrisl

Используйте последовательную печать для отладки..., @MatsK

@chrisl больше ничего нет. Если у меня есть "byte currentButton...." только для кнопки один, то это работает. Если я использую его так, как я написал выше, все компилируется и загружается нормально, но когда я нажимаю любую из двух кнопок, ничего не происходит., @user31208

@jsotola Все определено, и я не хотел беспокоить вас другими вещами, которые не имеют никакого отношения к этой проблеме., @user31208

@user31208, вы опубликовали частичную программу, поэтому нет возможности подтвердить, что код компилируется, и нет возможности точно определить сбой, @jsotola

Они не могут все использовать одну и ту же переменную lastEqualButtonTime, чтобы успевать за устранением дребезга., @Delta_G


1 ответ


Лучший ответ:

1

Вы только сказали "... это не работает", что не дает многого для продолжения, но первое, что я вижу, что может способствовать тому, что это не работает так, как (я думаю) вы ожидаете, это только одна переменная lastEqualButtonTime для обеих кнопок (она глобальная? Я не вижу определения). Я думаю, вам понадобится по одной для каждой.

,