Печатать только тогда, когда кнопка нажата и больше не нажимается

У меня есть Arduino и микропереключатель, который я хочу использовать, чтобы знать, когда переключатель изначально нажат (получите «OnsetTime» на последовательном) и когда переключатель больше не нажимается (получите «OffsetTime» на последовательном).

Представьте себе птицу, сидящую на выключателе. Я хочу получить вывод "OnsetTime", когда птица впервые садится на переключатель, и вывод "OffsetTime", когда птица улетает от переключателя.

Сейчас у меня есть вывод, который постоянно выводит "OnsetTime" при нажатии переключателя. Я был бы признателен, если бы кто-нибудь помог мне понять, как я могу реализовать приведенный ниже код, чтобы получать выходные данные только тогда, когда переключатель первоначально нажат и больше не нажимается.

void setup() {
  pinMode(7, INPUT);
  Serial.begin(9600);
}

void loop() {  
  if (digitalRead(7) == HIGH) {
    Serial.println("OnsetTime");
    }
}
    //Serial.println("GetOffsetTime");

, 👍1


2 ответа


1

Если вы хотите быть проще, вы можете использовать эту библиотеку. Код будет

#include <ezButton.h>

ezButton button(7);  // создаем объект Button, который подключается к контакту 7;

void setup() {
  Serial.begin(9600);
  button.setDebounceTime(100); // устанавливаем время устранения дребезга на 100 миллисекунд
}

void loop() {
  button.loop(); // ДОЛЖЕН сначала вызвать функцию loop()

  if(button.isPressed())
    Serial.println("OnsetTime");

  if(button.isReleased())
    Serial.println("GetOffsetTime");
}

Если вы хотите разобраться в деталях, вы можете ознакомиться с кодом и инструкциями в этом руководстве

,

Привет. Это дает мне ошибку: «Кнопка класса» не имеет члена с именем «setDebounceTime»., @John

Вы установили библиотеку ezButton? если нет, следуйте [этой инструкции](https://arduinogetstarted.com/tutorials/arduino-button-library), чтобы установить libraray, @Rozona Zoro

Да. Это необычный случай, поэтому я немного смущен. Вы пробовали это, и это работает?, @John

Да пробовал, работает. Я думаю, вы можете установить несколько библиотек кнопок. Пожалуйста, проверь это. Или запустите пример кода из библиотеки. Если все же произошло, какой Arduino вы используете?, @Rozona Zoro

Вы имеете в виду, что я хотел бы удалить другие библиотеки кнопок, если они у меня есть? Я использую Ардуино Уно., @John

Я попытался удалить другие библиотеки кнопок, и теперь код работает. Благодарю вас!, @John


1

Вы можете сохранить прочитанное значение переключателя, чтобы сравнить его в следующем цикле. Так вы сможете обнаруживать изменения.

int lastValue;

void setup() {
  pinMode(7, INPUT);
  lastValue= digitalRead(7);

  Serial.begin(9600);
}

void loop() {
  int currentValue = digitalRead(7);
  if (lastValue != currentValue) {
    lastValue = currentValue;

    if (currentValue == HIGH) {
      Serial.println("OnsetTime");
    } else {
      Serial.println("OffsetTime");
    }
  }
}

Обратите внимание, что переключатели дребезжат. Если вы видите несколько сообщений при каждом механическом изменении, вставьте delay(...).

,