Управляем RGB светодиодом с помощью ИК-пульта

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 24 июня 2017, 22:07

В добавок к этой схеме, подключаем RGB светодиод через 200 ом резисторы (если нет встроенных).
Управляем RGB светодиодом с помощью ИК-пульта.jpg
Управляем RGB светодиодом с помощью ИК-пульта
Управляем RGB светодиодом с помощью ИК-пульта.jpg (139.75 КБ) 3425 просмотров

Заливаем скетч

Код: Выделить всё

#include "IRremote.h"
IRrecv irrecv(2);           // указываем вывод, к которому подключен приемник
decode_results results;
int led1=0;
int led2=0;
int led3=0;

void setup() 
{
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(11,OUTPUT);
  Serial.begin(9600);
  irrecv.enableIRIn();     // запускаем прием
}

void loop() {
  if ( irrecv.decode( &results )) {           // если данные пришли
    Serial.println(results.value, HEX);
    
if 
(results.value==0xFFCA35&&led1==0){  // код кнопки делайте свой
  digitalWrite( 9, HIGH );led1=1;results.value=0;
}
if (results.value==0xFFCA35&&led1==1){
  digitalWrite( 9, LOW );led1=0;results.value=0;
}
  

else if 
(results.value==0xFF0AF5&&led2==0){  // код кнопки делайте свой
  digitalWrite( 10, HIGH );led2=1;results.value=0;
}
if (results.value==0xFF0AF5&&led2==1){
  digitalWrite( 10, LOW );led2=0;results.value=0;
}

else if (results.value==0xFF08F7&&led3==0){   // код кнопки делайте свой
  digitalWrite( 11, HIGH );led3=1;results.value=0;
}
if (results.value==0xFF08F7&&led3==1){
  digitalWrite( 11, LOW );led3=0;results.value=0;
}

 irrecv.resume();   // принимаем следующую команду
  }  
}


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

phpBB [media]
[center]i love you [s]mxIni[/s] Mysql[/center]


Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#2 Дим » 8 июля 2019, 19:51

Попалась мне на глаза ещё одна библиотека iarduino_IR_RX для работы с с ИК. Решил её попробовать - понравилось. Привожу пример работы. Три кнопки, при нажатии на которые, будет загораться если не горит и тухнуть если горит,
определённый для этой кнопки светодиод. Собираем схему по нижеприведённой картинке, установив к светодиоду резисторы на 220 ом.
библиотека iarduino_IR_RX.PNG
библиотека iarduino_IR_RX
библиотека iarduino_IR_RX.PNG (129.33 КБ) 3029 просмотров

и залив скетч, любуемся результатом. В скетче нужно изменить код кнопок (uint32_t Key1 = 0x2FD807F;) под свой пульт. Как узнать код читайте в статье Определяем код кнопок ИК пульта

Код: Выделить всё

#include <iarduino_IR_RX.h>                    // Подключаем библиотеку для работы с ИК-приёмником
iarduino_IR_RX IR(7);                          // Объявляем объект IR, с указанием вывода к которому подключён ИК-приёмник

bool led1 = false; uint32_t Key1 = 0x2FD807F;  // Определяем флаг нажатия и код кнопки 1
bool led2 = false; uint32_t Key2 = 0x2FD40BF;  // Определяем флаг нажатия и код кнопки 2
bool led3 = false; uint32_t Key3 = 0x2FDC03F;  // Определяем флаг нажатия и код кнопки 3
int ledPin1 = 9;                               // Светодиод, подключенный к вход/выходу 9
int ledPin2 = 10;                              // Светодиод, подключенный к вход/выходу 10
int ledPin3 = 11;                              // Светодиод, подключенный к вход/выходу 11

void setup(){
  pinMode(ledPin1,OUTPUT);                     // устанавливает режим работы - выход
  pinMode(ledPin2,OUTPUT);                     // устанавливает режим работы - выход
  pinMode(ledPin3,OUTPUT);                     // устанавливает режим работы - выход
  Serial.begin(9600);                          // Инициируем передачу данных в монитор последовательного порта, на скорости 9600 бит/сек
  IR.begin();                                  // Инициируем работу с ИК-приёмником
}
void loop()
{
  if(IR.check())                               // Если в буфере имеются данные, принятые с пульта (была нажата кнопка)
  {                                
    if
(IR.data==Key1 && led1 == 0)             // Если нажата первая кнопка (Key1) и светодиод не горит - флаг нажатия led1 == 0
      {led1 = 1; digitalWrite(ledPin1, HIGH );}// флаг устанавливаем на 1 и зажигаем светодиод (HIGH)
    else if(IR.data==Key1 && led1 == 1)        // Ну а если нажата первая кнопка (Key1) и светодиод горит - флаг нажатия led1 == 1
      {led1 = 0; digitalWrite(ledPin1, LOW );} // флаг устанавливаем на 0 и зажигаем светодиод (LOW) 
    
    if
(IR.data==Key2 && led2 == 0)             // и так же для других кнопок ...
      {led2 = 1; digitalWrite(ledPin2, HIGH );}
    else if(IR.data==Key2 && led2 == 1)
      {led2 = 0; digitalWrite(ledPin2, LOW );}
    
    if
(IR.data==Key3 && led3 == 0)
      {led3 = 1; digitalWrite(ledPin3, HIGH );}
    else if(IR.data==Key3 && led3 == 1)
      {led3 = 0; digitalWrite(ledPin3, LOW );}
  } 
}


На видео у меня не установлены резисторы, но они нужны, иначе светодиоду придет кирдык.  :hammer:
phpBB [media]
[center]i love you [s]mxIni[/s] Mysql[/center]


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Программирование»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 5 гостей