Проблема с IR передатчиком

NEGr
Offline
Зарегистрирован: 12.05.2014

Добрый день.

Извеняюсь, если этот вопрос покажется повтором, но подобного ничего на форуме не нашел.

Собственно суть вопроса:

Имеется Arduino Leonardo, Arduino micro, IR передатчик, IR приемник.

Использою, как и большенство библиотеку IRremote. На прием все работает как надо.

А вот на передачу ничего не происходит.

Как подсказывает здравый смысл - проблема явно не с библиотекой( у всех же работает). Видимо дело все-таки в аппаратной части.

Вот собственно сам скетч:

#include <IRremote.h>
IRsend irsend;
 
void setup() {
   Serial.begin(9600);
}
 
void loop() 
{
   if (Serial.available()!=0)
   {
     char val = Serial.read();
     if (val == '1')
     {
        for (int i = 0; i < 3; i++) 
        {
           irsend.sendNEC(0x20DFFF00, 32);
           delay(100);
        }
     }
   }
} 

Проблема в том что сигнал не отправляется( ни отлавливается приемником на другом arduino, ни светится в камере телефона). Подключено как и описанно в библиотеке на 3 pin.

Диоды все рабочие. Подключались как с понижающим резистором, так и без него.

В чем может быть затыка????

 

maksim
Offline
Зарегистрирован: 12.02.2012
#elif defined(__AVR_ATmega32U4__)
  //#define IR_USE_TIMER1   // tx = pin 14
  //#define IR_USE_TIMER3   // tx = pin 9
  #define IR_USE_TIMER4_HS  // tx = pin 10

 

NEGr
Offline
Зарегистрирован: 12.05.2014

maksim пишет:

#elif defined(__AVR_ATmega32U4__)
  //#define IR_USE_TIMER1   // tx = pin 14
  //#define IR_USE_TIMER3   // tx = pin 9
  #define IR_USE_TIMER4_HS  // tx = pin 10

А можно чуть поподробнее: эту часть необходимо добавить в начало скетча или куда-то в библиотеку?

NEGr
Offline
Зарегистрирован: 12.05.2014

Так понимаю это нужно было воткнуть в файл IRremoteInt.h?

Попробовал сделать так: результат тотже (подключал и к 3 и 10 pinу).

Скачал библиотеку https://github.com/shirriff/Arduino-IRremote/blob/master/IRremoteInt.h

Здесь так понимаю как раз нужные изменения. Заменил, но результат тотже.

Можете поделиться ссылкой на библиотеку, которую используете вы?(вопрос к maksim)

NEGr
Offline
Зарегистрирован: 12.05.2014

Решил проблему.

Кому интересно: скачал другую библиотеку https://github.com/cyborg5/IRLib/

Если посмотреть внутри то для ATmega32U4 нужно использовать pin 9.

А вот как пример переписанный выше скетч:

#include <IRLib.h>
IRsend irsend;
 
void setup() {
   Serial.begin(9600);
}
 
void loop() 
{
   if (Serial.available()!=0)
   {
     char val = Serial.read();
     if (val == '1')
     {
        for (int i = 0; i < 3; i++) 
        {
           irsend.send(NEC,0x20DFFF00,32);   
           delayMicroseconds (100);
        }
     }
   }
} 

Диод мигает. Правда нет возможности проверит то ли он отправляет.

Как проверю отпишусь.

NEGr
Offline
Зарегистрирован: 12.05.2014

maksim пишет:

#elif defined(__AVR_ATmega32U4__)
  //#define IR_USE_TIMER1   // tx = pin 14
  //#define IR_USE_TIMER3   // tx = pin 9
  #define IR_USE_TIMER4_HS  // tx = pin 10

Спасибо за ответ, только теперь разобрался, что ты имел в виду.

Правда только таймер нужен был другой :#define IR_USE_TIMER1 // tx = pin 9

А так все и со старой библиотекой работает.

Так что есть два решения: либо использовать другую библиотеку, либо в текущей сделать небольшие изменения.

 

rjlexx
Offline
Зарегистрирован: 28.01.2015

Я столкнулся с подобной проблемой на Arduino Nano. Немного поизучав код в файле IRremoteInt.h, пришел к выводу, что для передачи данных надо использовать 3й пин. Подключил ИК диод к 3му цифровому пину и все заработало.

// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc
#else
  //#define IR_USE_TIMER1   // tx = pin 9
  #define IR_USE_TIMER2     // tx = pin 3
#endif