Урок 6 - Свечение светодиода пока нажата кнопка на пульте ДУ (IR)

.Урок 6 - Свечение светодиода пока нажата кнопка на пульте ДУ (IR)

В предыдущем уроке я уже рассказал как можно подключить IR приемник к Arduino и включать и выключать светодиод с помощью пульта дистанционного управления (ДУ).
После чего мне поступили вопросы :
1. «А возможно ли организовать чтобы, например, включался светодиод но только на время удержания кнопки, и гас сразу после ее освобождения?»,
2. «Подскажите пожалуйста, а возможно ли организовать чтобы, например, включался светодиод но только на время удержания кнопки, и гас сразу после ее освобождения? нигде не получилось найти инфу»
Данный вопрос в принципе простой и я делал машину на пульте управления и Arduino по данному принципу. Поделился ссылкой на материал. Но почему то есть трудности по реализации данного управления. Давайте наденем домашние тапочки и пойдем разбираться.

 подключить IR приемник к Arduino И так рассмотрим пример из предыдущего урока "Управление Arduino с помощью пульта ДУ (IR). Библиотека IRremote", когда мы получаем коды с кнопок.


#include 
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
  Serial.begin(9600);
  // In case the interrupt driver crashes on setup, give a clue
  // to the user what's going on.
  Serial.println("Enabling IRin");
  irrecv.enableIRIn(); // Start the receiver
  Serial.println("Enabled IRin");
}
void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
  delay(100);
}

При нажатии кнопок пульта ДУ мы получаем вот такой результат.

FF18E7
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFA857
FF02FD
FF5AA5
FFFFFFFF
FFFFFFFF
FFFFFFFF
FF10EF
FF5AA5

Как видим у нас при длительном нажатии выводит вот такой код: «FFFFFFFF». Который не относиться ни к одной кнопки. Этот код выводиться с определенной периодичностью, когда кнопка нажата и мы ее не отпускаем. Отпустив кнопку мы увидим, что данный код больше не выводиться в сериал порт. Используя данный принцип можно написать код под наши нужды. Вот пример условия который нам нужно добавить в код.

   

 if (results.value == 0xFFFFFFFF) // кнопка зажата
      {
        flag = flag;          // собновляем состояние светодиода
      }



Сперва думал сильно не изменять код и сделать на основе урока 5. Но код получается громоздкий и не читабельный. Немного все сократил и получился небольшой код. И более читабельный. Но при этом сложнее для понимания.

//FF10EF   — стрелочка вправо
//FF5AA5   — стрелочка влево
#include "IRremote.h"
IRrecv irrecv(11);           // указываем вывод, к которому подключен приемник
decode_results results;
int flag = 0;                // состояние светодиода 0-выкл. 1- вкл. 
long prestroMillis = 0;      // для отчета времени первоночальное значение
void setup() {
  irrecv.enableIRIn();       // запускаем прием
}
void loop() {
  unsigned long curstroMillis = millis();  // устанавливаем время в сейчас
  if ((curstroMillis - prestroMillis) > 200) // проверяем интервал
  {
    if (irrecv.decode(&results)) { // если получаем данные с пульта ДУ
      if (results.value == 0xFF10EF)
        flag = 1;           // вкл. светодиод
      if (results.value == 0xFFFFFFFF) // кнопка зажата
      {
        flag = flag;          // собновляем состояние светодиода
      }
      irrecv.resume();        // принимаем следующую команду
    }
    prestroMillis = curstroMillis; // обнуляем счетчик для нового цикла 
  } 
  else                     // данные не поступают с пульта ДУ 
  flag = 0;                // выключаем светодиод
 digitalWrite( 13, flag );
}

Возникли вопросы. Пишите в комментарии.


Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.

Спасибо за внимание!

Вернуться в раздел: Уроки Arduino: Подключение датчиков и модулей к Arduino Дата публикации 30 июля , 2018

Яндекс.Метрика

Portal-PK (Портал ПК) © 2015 - 2018 MiniYiiCMS Заказать сайт: f-studio.biz
Обратная связь
Подписаться на новости
RSS