Arduino:Примеры/Retrigger

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Перезапуск события[1]

Этот пример показывает, как при помощи библиотеки Bounce настроить плату Arduino на устранение дребезга контактов при использовании кнопки, подключенной к плате. Также добавлен код, который каждые 500 миллисекунд включает светодиод, но при условии, если нажата кнопка.

Код

/* 
ОПИСАНИЕ
====================
Это пример для библиотеки Bounce, показывающий, как перезапускать 
определенное событие, если нажата кнопка. В данном случае этим событием будет активация светодиода каждые 500 миллисекунд.
Чтобы видеть отладочные сообщения, откройте монитор порта (57600 бод).
*/

// Подключаем библиотеку Bounce2. Найти ее можно тут:
// https://github.com/thomasfredericks/Bounce-Arduino-Wiring

#include <Bounce2.h>


#define BUTTON_PIN 2
#define LED_PIN 13

// Создаем экземпляр класса Bounce:
Bounce debouncer = Bounce(); 

int buttonState;
unsigned long buttonPressTimeStamp;

int ledState;

void setup() {
  
  Serial.begin(57600);
  
  // Настраиваем кнопку:
  pinMode(BUTTON_PIN,INPUT);
  // Активируем встроенный подтягивающий резистор:
  digitalWrite(BUTTON_PIN,HIGH);
  
  // Теперь настраиваем экземпляр Bounce для этой кнопки:
  debouncer.attach(BUTTON_PIN);
  debouncer.interval(5);
  
  // Настраиваем светодиод:
  pinMode(LED_PIN,OUTPUT);
  digitalWrite(LED_PIN,ledState);
  
}

void loop() {
 // Обновляем экземпляр Bounce и считываем изменившееся состояние:
  boolean changed = debouncer.update();


  
  if ( changed ) {
       // Считываем обновленное значение:
     int value = debouncer.read();
    if ( value == HIGH) {
       ledState = LOW;
       digitalWrite(LED_PIN, ledState );
   
       buttonState = 0;
       Serial.println("Button released (state 0)");  //  "Кнопка отпущена (состояние 0)"
   
   } else {
          ledState = HIGH;
       digitalWrite(LED_PIN, ledState );
       
         buttonState = 1;
         Serial.println("Button pressed (state 1)");  //  "Кнопка нажата (состояние 1)"
         buttonPressTimeStamp = millis();
     
   }
  }
  
  if  ( buttonState == 1 ) {
    if ( millis() - buttonPressTimeStamp >= 500 ) {
         buttonPressTimeStamp = millis();
         if ( ledState == HIGH ) ledState = LOW;
         else if ( ledState == LOW ) ledState = HIGH;
         digitalWrite(LED_PIN, ledState );
        Serial.println("Retriggering button");
    }
  }
 
 
}

См.также

Внешние ссылки