Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/Retrigger

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


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

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

Код

  1. /*
  2. ОПИСАНИЕ
  3. ====================
  4. Это пример для библиотеки Bounce, показывающий, как перезапускать
  5. определенное событие, если нажата кнопка. В данном случае этим событием будет активация светодиода каждые 500 миллисекунд.
  6. Чтобы видеть отладочные сообщения, откройте монитор порта (57600 бод).
  7. */
  8.  
  9. // Подключаем библиотеку Bounce2. Найти ее можно тут:
  10. // https://github.com/thomasfredericks/Bounce-Arduino-Wiring
  11.  
  12. #include <Bounce2.h>
  13.  
  14.  
  15. #define BUTTON_PIN 2
  16. #define LED_PIN 13
  17.  
  18. // Создаем экземпляр класса Bounce:
  19. Bounce debouncer = Bounce();
  20.  
  21. int buttonState;
  22. unsigned long buttonPressTimeStamp;
  23.  
  24. int ledState;
  25.  
  26. void setup() {
  27.  
  28.   Serial.begin(57600);
  29.  
  30.   // Настраиваем кнопку:
  31.   pinMode(BUTTON_PIN,INPUT);
  32.   // Активируем встроенный подтягивающий резистор:
  33.   digitalWrite(BUTTON_PIN,HIGH);
  34.  
  35.   // Теперь настраиваем экземпляр Bounce для этой кнопки:
  36.   debouncer.attach(BUTTON_PIN);
  37.   debouncer.interval(5);
  38.  
  39.   // Настраиваем светодиод:
  40.   pinMode(LED_PIN,OUTPUT);
  41.   digitalWrite(LED_PIN,ledState);
  42.  
  43. }
  44.  
  45. void loop() {
  46.  // Обновляем экземпляр Bounce и считываем изменившееся состояние:
  47.   boolean changed = debouncer.update();
  48.  
  49.  
  50.  
  51.   if ( changed ) {
  52.        // Считываем обновленное значение:
  53.      int value = debouncer.read();
  54.     if ( value == HIGH) {
  55.        ledState = LOW;
  56.        digitalWrite(LED_PIN, ledState );
  57.    
  58.        buttonState = 0;
  59.        Serial.println("Button released (state 0)");  //  "Кнопка отпущена (состояние 0)"
  60.    
  61.    } else {
  62.           ledState = HIGH;
  63.        digitalWrite(LED_PIN, ledState );
  64.        
  65.          buttonState = 1;
  66.          Serial.println("Button pressed (state 1)");  //  "Кнопка нажата (состояние 1)"
  67.          buttonPressTimeStamp = millis();
  68.      
  69.    }
  70.   }
  71.  
  72.   if  ( buttonState == 1 ) {
  73.     if ( millis() - buttonPressTimeStamp >= 500 ) {
  74.          buttonPressTimeStamp = millis();
  75.          if ( ledState == HIGH ) ledState = LOW;
  76.          else if ( ledState == LOW ) ledState = HIGH;
  77.          digitalWrite(LED_PIN, ledState );
  78.         Serial.println("Retriggering button");
  79.     }
  80.   }
  81.  
  82.  
  83. }

См.также

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

  1. github.com - retrigger.ino