Урок 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

Комментарии

Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.

человек
#7 Гость: человек (8 августа, 2020 в 16:57)

не работает ваш код

Михаил
#6 Гость: Михаил (29 июля, 2019 в 15:21)

решил это проще, двумя строчками:

в конец кода добавил last = results.value; и в начале проверку if(results.value == 4294967295){results.value = last;}

Владимир Труханов
#5 Гость: Владимир Труханов (12 марта, 2019 в 19:45)

Полезная информация, для себя я узнал что-то новое. Я как-то раз по теме светодиодных ламп помню презентацию делал, так что что-то я уже знал.

Валера Бойко
#4 Гость: Валера Бойко (12 марта, 2019 в 19:45)

Теперь понятно как работает пульт.Код стал читабельным и не очень сложным.Жду новых уроков с нетерпением.

Jhanderos Vago
#3 Гость: Jhanderos Vago (12 марта, 2019 в 19:45)

Эти полезные и необходимые продукты информатики очень хороши для сетевых маукинов

икита Рак
#2 Гость: икита Рак (12 марта, 2019 в 19:44)

Спасибо большое очень познавательный урок....Пока необходимости в его применении нет, но на всякий случай добавляю в закладки... Жду новых увлекательных разработок!

Евгений Столяров
#1 Гость: Евгений Столяров (12 марта, 2019 в 19:44)

как раз и задавал такой вопрос, оказалось, по какой то причине при удержании не появляется код FFFFFFFF, а просто в мониторе постоянно идет кощд кнопки. Потому даный пример, к сожалению не смог бы помочь проблемме. Вопрос решен, чуть ниже отписался. Спасибо что не проигнорили, и попытались помочь.


Cлучайные товары

Посмотреть товар в Магазине »

Мы в соц сетях

Подпишись на канал Telegram

Portal-PK (Портал ПК) © 2015 - 2024
Разработка проектов
AT Block
DWIN Box