IR приемник
- Войдите на сайт для отправки комментариев
Ср, 31/01/2018 - 14:46
Здравствуйте.
Очень странный(а может, нет?) приём ИК сигнала с обычного пульта. При нажатии на любую кнопку выводятся неоднозначные данные(или так и должно быть?..). При этом 8-разрядный код, виновник торжества(он мне и нужен, как вы поняли), не появляется вовсе, хотя раньше он выводился с этого самого пульта, хоть и чередовался с "левыми" значениями. Теперь же выводятся только "левые" значения. Вот скрин монитора порта и скетч:
#include <IRremote.h> // подключаем библиотеку для IR приемника IRrecv irrecv(A0); // указываем пин, к которому подключен IR приемник decode_results results; void setup() // процедура setup { irrecv.enableIRIn(); // запускаем прием инфракрасного сигнала pinMode(A0, INPUT); // пин A0 будет входом (англ. «intput») Serial.begin(9600); // подключаем монитор порта } void loop() // процедура loop { if (irrecv.decode(&results)) // если данные пришли выполняем команды { Serial.println(results.value); // отправляем полученные данные на порт irrecv.resume(); // принимаем следующий сигнал на ИК приемнике } }
Приемник подключен к А0. Что это? Так и должно быть?
На скорость не влияет, но строка 9 лишняя - уберите.
По делу же. Проверьте правильность соединения и батарейку в пульте.
Строку убрал. Взял другой пульт из набора ардуино. Батарейка - 3,2 V, только что проверил. 8-разрядный десятичный код приходит, но между ним влезают 9,10-разрядные "нечто". При удержании кнопки пульта выдает один и тот же для всех кнопок 10-разрядный код. Проблема в соединении?
И еще: разве код не должен быть шестнадцатеричным? Даже если мне приходит 8-разрядный десятичный код, то при переводе получается лишь 7-разрядный шестнадцатеричный, а нужен 8-разрядный.
Не знаю, может быть. проверяйте
Хорошо, предположим, при использовании другого пульта выдает раз ( через десять фальсификата) 16769565. Как теперь подать этот сигнал с инфракрасного диода? Вот так не получается:
Хотя ИК диод в камеру мигает.
Делайте так и будет вам шестнадцетеричный без лидирующих нулей.
Serial
.println(results.value, HEX);
И лампочки всякие люминисцентные выключите во время испытаний.
Диод мигать может, а вот далеко бить - нет. Если от ардуины напрямую его припитали, то может только сантиметров пять пробивать.
Наконец то дельный совет! Выяснил, что "левые" значения - FFFFFFFF (при удержании кнопки только он и выходит) и 10EFD02F. Очевидно, максимальное 8-разрядное шестнадцатеричное значение выходит неспроста. Что это за "неспроста", которое перекрывает мне основное значение?
Это признак того, что последняя нажатая кнопка (напр. 10EFD02F) всё еще не отпущена.
То есть залипла кнопка? Но ведь в коде указано: если есть сигнал то.... Если я не нажимаю на кнопки, в монитор порта ничего не выводится.
Ну да ладно, спасибо. Вроде разобрался. Надо было HEX написать и все. Сбили с толку десятичные показатели. Единственное, осталось FFFFFFFF, но это несложно обойти.
Проведите простой эксперимент:
Нажмите "1" и держите. Отпустите. Нажмите "2" и держите. Отпустите. Первый код будет разный, а потом будет повторяться FFFFFFF. Это значит, что вы кнопку не отпустили. Когда отпустите - фффффф прекратит передаваться.
Определил наконец код с кнопки выключения телевизора. ИК диод подключен к 3 пину, на камеру мигает с установленным интервалом, но тускловато.
Но телевизор ноль реакции.
Резистор стоит 100 Ом. Ошибка в коде? Или резистор поменять?
Собственно, замена резистора уже на 50 Ом не увенчалась успехом
Ну так телевизор на каком расстоянии? Поднесите прямо ему к приемнику - скорее всего заловит. Если правильно определили типа посылки (Sony). Резистор рассчитывать надо (по закону Ома).
Еще один момент. Тип посылки - это что? Для каждого прибора свой?
Тыкаю прямо в приемник. Не реагирует
Хорошо, рассчитаю
Еще один момент. Тип посылки - это что? Для каждого прибора свой?
Естественно. IRDump в примерах смотрите.
Decoded NEC. То есть sendNEC ?
Вместо sendSony?
Ну вот видите - всё просто. Не тот тип посылки.
Decoded NEC. То есть sendNEC ?
Чисто из любопытства - а телевизор-то какой?
NYUNDAI
ИК диод мигает, телевизор - не реагирует. Эхх
Ну вы хоть посмотрите в примерах, как sendNEC() вызывается, особенно на второй параметр обратите внимание.
В примерах sendNEC(число, 32)
32?
Ну, понятно, битность. А как же пин, к которому подключается IR диод? Где его указывать?
http://forum.amperka.ru/threads/ИК-передатчик.3305/
Здесь такая же проблема. И вроде как библиотеку меняют. Может, и в этом проблема?.
А что, другая библиотека вдует в светодиод больше мощи что ли? У меня самсунг уверенно ловит с 20 см с обычным IR + килоомный резистор, подключенным напрямую к пину. Если надо больше - раскачивайте диод транзистором.
АААААААА. ЗАРАБОТАЛ. СПАСИБО!!! define помог. Только откуда это? Почему я не нашел этого?
Если кому то нужно будет, вот рабочий код:
Ну, три раза передавать код NEC-у не надо, он не такой тупой.
А дефайн заменяется на #include <IRremoteInt.h>
А это пример из библиотеки. Ее создатель считает код тупым.
Где вы находите описание библиотек? Набрав в поисковик "IRremote библиотека описание" ничего толкового не нашел.
А это пример из библиотеки. Ее создатель считает код тупым.
Если Вы номер канала три раза пришлёте - ничего не случится, а питание так дёргать наверное не надо.
Все вопросы - к создателю IRremote :)
Код я исправлю, хорошо
А это пример из библиотеки. Ее создатель считает код тупым.
Где вы находите описание библиотек? Набрав в поисковик "IRremote библиотека описание" ничего толкового не нашел.
Не знаю, что хотел продемонстрировать писатель примера, но вот тут, например, нет никакого троекратного посылания: http://led-displays.ru/ir/sony_sirc_protocol.html , https://www.sbprojects.net/knowledge/ir/sirc.php
Я подключал к цифровому входу D, и считывал через digitalRead, все работало.
Здравствуйте.
Очень странный(а может, нет?) приём ИК сигнала с обычного пульта. При нажатии на любую кнопку выводятся неоднозначные данные(или так и должно быть?..). При этом 8-разрядный код, виновник торжества(он мне и нужен, как вы поняли), не появляется вовсе, хотя раньше он выводился с этого самого пульта, хоть и чередовался с "левыми" значениями. Теперь же выводятся только "левые" значения. Вот скрин монитора порта и скетч:
Приемник подключен к А0. Что это? Так и должно быть?
не дописана конвертацмия в HEX или DEC