Подключение ИК(IR) приемника TSOP к Ардуино. Библиотека IRremote 18

Для подключения ИК приемника к ардуино используем библиотеку IRremote

Качаем библиотеку отсюда http://github.com/shirriff/Arduino-IRremote

Распаковывем ее в папку \libraries\ и меняем название на 

Запускаем , открываем пример «IRremote -> IRrecvDemo»

irremote

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
* IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
* An IR detector/demodulator must be connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/
 
#include <IRremote.h>
 
int RECV_PIN = 11;
 
IRrecv irrecv(RECV_PIN);
 
decode_results results;
 
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
 
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
}
/*
* IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
* An IR detector/demodulator must be connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}

void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
}

На одинадцатый пин Ардуино подключаем выход с нашего ИК приемника, В моем случае это 1833.

Открываем «Сервис -> монитор порта» и смотрим коды кнопок, которые мы нажимаем.

Мы указали, что все коды будут выводиться в формате HEX

1
Serial.println(results.value, HEX);
Serial.println(results.value, HEX);

Запомним коды двух кнопок(C667A и AB009) и изменим немного наш :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
* IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
* An IR detector/demodulator must be connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/
 
#include <IRremote.h>
 
int RECV_PIN = 11;
 
IRrecv irrecv(RECV_PIN);
 
decode_results results;
 
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
 
pinMode(3, OUTPUT);
}
 
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value);
 
if (results.value==0xAB009) {//поменяйте на свой код
digitalWrite(3,HIGH);
}
 
if (results.value==0xC667A) {//поменяйте на свой код
digitalWrite(3,LOW);
}
 
irrecv.resume(); // Receive the next value
}
}
/*
* IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv
* An IR detector/demodulator must be connected to the input RECV_PIN.
* Version 0.1 July, 2009
* Copyright 2009 Ken Shirriff
* http://arcfn.com
*/

#include <IRremote.h>

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver

pinMode(3, OUTPUT);
}

void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value);

if (results.value==0xAB009) {//поменяйте на свой код
digitalWrite(3,HIGH);
}

if (results.value==0xC667A) {//поменяйте на свой код
digitalWrite(3,LOW);
}

irrecv.resume(); // Receive the next value
}
}

Мы добавили светодиод на 3 пин Ардуино.

По нажатию на кнопку с кодом >AB009< светодиод включается, по нажатию на кнопку с кодом >C667A< светодиод выключается.

18 комментс для “Подключение ИК(IR) приемника TSOP к Ардуино. Библиотека IRremote

  1. Ответить KazakOFF Авг 14, 2013 19:11

    А как избавиться от FFFFFFFF мешает работе ?

    40BF906F
    FFFFFFFF
    FFFFFFFF
    FFFFFFFF

    • Ответить MiGeRA Апр 10, 2016 19:55

      decode_results results;
      long keyCode;
      unsigned long last = millis();

      if (irrecv.decode(&results)) {
      if (millis() — last > 250) {
      keyCode = results.value;
      Serial.println(keyCode, HEX);
      }
      last = millis();
      irrecv.resume();
      }

  2. Ответить admin Авг 14, 2013 19:56

    FFFFFF, как я понял, это код повтора?

    Добавить переменную «код последней нажатой кнопки».
    При получении сигнала проверять — пришло FFFFFF или что-то другое, если другое то переменную перезаписываем на то что пришло, если пришло FFFFFF то полученный код заменяем на предыдущее значение или просто обнуляем

    /*
    * IRremote: IRrecvDemo — demonstrates receiving IR codes with IRrecv
    * An IR detector/demodulator must be connected to the input RECV_PIN.
    * Version 0.1 July, 2009
    * Copyright 2009 Ken Shirriff
    * http://arcfn.com
    */

    #include

    int RECV_PIN = 11;
    int LastCode=0;
    int Code=0;
    IRrecv irrecv(RECV_PIN);

    decode_results results;

    void setup()
    {
    Serial.begin(9600);
    irrecv.enableIRIn(); // Start the receiver

    pinMode(3, OUTPUT);
    }

    void loop() {
    if (irrecv.decode(&results)) {
    Serial.println(results.value);
    if (results.value!=0xFFFFF)
    {
    Code=LastCode;
    } else {
    Code=results.value;
    LastCode=results.value;
    }
    if (Code==0xAB009) {//поменяйте на свой код
    digitalWrite(3,HIGH);
    }

    if (Code==0xC667A) {//поменяйте на свой код
    digitalWrite(3,LOW);
    }

    irrecv.resume(); // Receive the next value
    }
    }

  3. Ответить KazakOFF Авг 21, 2013 14:07

    Я сделал так.

    #include
    #define irPin 3
    IRrecv irrecv(irPin);
    decode_results results;

    void setup() {
    irrecv.enableIRIn();
    pinMode(0, OUTPUT);
    }

    void loop() {
    if (irrecv.decode(&results)) {

    switch (results.value) {
    case 0x926DE21D:
    digitalWrite(0,HIGH);
    break;

    case 0x926DC23D:
    digitalWrite(0,LOW);
    break;

    }

    irrecv.resume();
    }
    }

  4. Ответить Slava Авг 21, 2013 16:20

    Можно и так, только реагировать будет один раз при длительном нажатии.
    В некоторых случаях, например при увеличении громкости или яркости, необходимо реагировать и на повторы.

  5. Ответить KazakOFF Авг 26, 2013 21:05

    хмм да я тоже задумался)) кстати пример автора не работает.

  6. Ответить Slava Авг 27, 2013 09:55

    Пример из статьи?
    понятие «не работает» — не определенно )))

  7. Ответить SpeedBoy Дек 9, 2013 17:40

    Собственно, про «Подключекние ИК приёмника к Ардуино» и ни слова 🙁

  8. Ответить attiny13a Янв 30, 2014 22:32

    Що робити коли при компіляції IRrecvDemo вибиває помилка?

  9. Ответить Slava Янв 30, 2014 23:25

    Какая ошибка?

  10. Ответить AllXXX Сен 19, 2014 07:40

    Приветствую
    собрал подобною схему Arduino Pro mini + VS1838B
    при нажатии на одну кнопку пульта получаю разные коды (кнопка POWER):
    15DB9428
    29041557
    D9F75DB9
    FDAC0150
    A9AEAB34
    D3BF75A5
    ABDF9274
    4BD03788
    FEAC02E5
    4AB0F7B7
    4ED03C41
    2A3A882A
    49B0F626
    4AB0F7B5
    FFFFFFFF
    4AB0F7B7
    E6CCA9D0
    FFFFFFFF
    49B0F626
    4AB0F7B5
    49B0F626
    4AB0F7B7
    901C1F3A
    FFFFFFFF
    4AB0F7B7
    911C20CD
    подскажите как это можно исправить?

    • Ответить Slava Окт 28, 2014 11:05

      Какой пульт у вас? возможно библиотека не поддерживает данный пульт ДУ попробуйте с другими пультами.

  11. Ответить Иван Мар 23, 2015 08:47

    Помогите! У мня проблема почти как в предыдущем посте, только монитор порта начинает выдавать беспрерывно кучу кодов. Я даже пульт в руки не брал… Что делать? В чем проблема?

  12. Ответить soznik Сен 20, 2015 15:06

    У меня проблема. Первый скетч компилируется нормально, а второй
    с опознаванием кода выдает ошибку:

    Arduino: 1.6.6 Hourly Build 2015/09/09 11:42 (Windows XP), Плата:»Arduino/Genuino Uno»

    Изменены опции сборки, пересобираем все
    collect2.exe: error: ld returned 5 exit status
    Ошибка компиляции.

    • Ответить Slava Сен 20, 2015 17:31

      Попробуйте закомментировать все, и по одной строки добавлять…

      На какой строчке появляется ошибка?

  13. Ответить Спрашивающий Авг 14, 2016 17:53

    Использую TSOP 1736
    При нажатии на любую кнопку пульта от телевизора SAMSUNG всегда в мониторе порта получаю значение 0. При этом, от пультов других устройств получаю нормальные шестандцатиричные значения.

Добавить комментарий