Помогите, пожалуйста, ИК передатчик на arduino.
- Войдите на сайт для отправки комментариев
Чт, 19/01/2017 - 18:36
У меня есть плата Ардуино Уно, ИК светодиод и ИК приемник. С помощью ИК приемника я считал код с пульта (пульт не от телевизора). Мне надо этот же код передать через ИК светодиод на устройство. Облезал весь интернет, никак не могу найти скетч ((( Помогите, пожалуйста!!! Код с приемника - A25313D1.
Облезал весь интернет, никак не могу найти скетч
Прямо весь?
Ну, а примеры к самой ходовой библиотеке IRremote смотрели? Там есть IRsendDemo, IRsendRawDemo и ещё штуки три.
#include <IRremote.h> IRsend irsend; void setup() { } void loop() { for (int i = 0; i < 3; i++) { irsend.sendSony(0xA25313D1, 12); delay(40); } delay(5000); //5 second delay between each signal burst }Если смотреть через камеру - сведодиод горит, но устройство сигнал не распозноет. Что делать?
Ну хорошо, пример вы нашли, теперь как и куда подключен ИК диод, да и что за диод ?.
Обычный ИК диод. Подключен к 3 пину
Ураааааа!!!
Как всё было просто!!! Заглянул в примеры и всё получилось! Спасибо!
Подскажите, пожалуйста, я могу в одной программе считывать информацию с ИК приемник и посылать через ик светодиод?
Как это записать?
#include <IRremote.h>
IRrecv irrecv(8);
IRrecv irsend;
по той же ссылке два примера IRrecvDemo и IRSendDemo, обьедините их.
У меня зависает. Не могу понять почему.
if (results.value==0xFF4AB5){//8 int khz = 38; // 38kHz carrier frequency for the NEC protocol unsigned int irSignal[] = {12900,600,2100,550,750,1900,800,1900,750}; //AnalysIR Batch Export (IRremote) - RAW irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz); //Note the approach used to automatically calculate the size of the array. };При нажатия на кнопку (FF4AB5) ардуино полностью зависает.
Подскажите, пожалуйста, я могу в одной программе считывать информацию с ИК приемник и посылать через ик светодиод?
Да, кто ж Вас знает, можете Вы или нет?
Какими то не понятными кусками кидаетесь и просите о помощи.
В сервис приходите тоже со шнуром зарядки и просите починить телефон ?
#include <IRremote.h> #include <IRremoteInt.h> IRsend irsend; IRrecv irrecv(8); decode_results results; int re = 0; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if(re == 1){ int khz = 38; // 38kHz carrier frequency for the NEC protocol unsigned int irSignal[] = {12900,600,2100,550,750,1900,800,1900,750}; //AnalysIR Batch Export (IRremote) - RAW irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz); //Note the approach used to automatically calculate the size of the array. re = 0; }; if ( irrecv.decode( &results )) { Serial.println(results.value, HEX); if (results.value==0xFF38C7){//5 re=1; //delay(100); }; results.value=0; irrecv.resume(); }; }Вот исходный код.
Мне надо чтобы при нажатии на кнопку FF38C7 на пульте, ИК светодиод посылал код (12900,600,2100,550,750,1900,800,1900,750) на плеер. Вместо этого ardulino зависает.
3 порт - ИК светодиод, 8 порт - ИК приемник.
Как Вы определяете что зависает ?
Прошейте это
#include <IRremote.h> #include <IRremoteInt.h> IRsend irsend; IRrecv irrecv(8); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if ( irrecv.decode( &results )) { Serial.println(results.value, HEX); if (results.value == 0xFF38C7) { Serial.println("Send ..."); int khz = 38; // 38kHz carrier frequency for the NEC protocol unsigned int irSignal[] = {12900, 600, 2100, 550, 750, 1900, 800, 1900, 750}; irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz); Serial.println("End send ..."); }; results.value = 0; irrecv.resume(); }; }Что монитор порта выдает ?
При нажатии на кнопку монитор порта выводит FF38C7. Светодиод так и не загорается, а все последующие команды игнорируются.
Это ответ на первый вопрос.
Что монитор порта выдает ?
Но светодиод не загорается...
поехали дальше
#include <IRremote.h> #include <IRremoteInt.h> IRsend irsend; IRrecv irrecv(8); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if ( irrecv.decode( &results )) { Serial.println(results.value, HEX); if (results.value == 0xFF38C7) { Serial.println("Send ..."); int khz = 38; // 38kHz carrier frequency for the NEC protocol unsigned int irSignal[] = {12900, 600, 2100, 550, 750, 1900, 800, 1900, 750}; irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz); Serial.println("End send ..."); }; irrecv.resume(); }; delay(100); };Тоже самое...
xDriver, не мучтесь. Или Вам надо самому писать или ТС надо "слушать валенки". Там требуется не такая квалификация, как у ТС.
Приёмник и передатчик используют один и тот же таймер, причём конфигурируют его по-разному. Чтобы они могли работать, надо чётко разделить по времени приём и передачу.
xDriver, не мучтесь. Или Вам надо самому писать или ТС надо "слушать валенки". Там требуется не такая квалификация, как у ТС.
Приёмник и передатчик используют один и тот же таймер, причём конфигурируют его по-разному. Чтобы они могли работать, надо чётко разделить по времени приём и передачу.
Да спасибо, я как то и не подумал пристально глянуть в эту библу, а там во оно что...
#include <IRremote.h> #include <IRremoteInt.h> IRsend irsend; IRrecv irrecv(8); decode_results results; int re = 0; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if(re == 1){ int khz = 38; // 38kHz carrier frequency for the NEC protocol unsigned int irSignal[] = {12900,600,2100,550,750,1900,800,1900,750}; //AnalysIR Batch Export (IRremote) - RAW irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz); //Note the approach used to automatically calculate the size of the array. re = 0; }; if ( irrecv.decode( &results )) { Serial.println(results.value, HEX); if (results.value==0xFF38C7){//5 re=1; delay(1000); }; results.value=0; irrecv.resume(); }; }Здесь приемник получает код, ждет 10 секунд и включает светодиод, но arduino всё равно зависает. Почему так?
я так понял задержку надо ставить после отправки, чтобы успели уйти данные по таймеру
после 18 строки сделайте задержку в 500-1000 ms
это кривой подход, но просто интересно.
я так понял задержку надо ставить после отправки, чтобы успели уйти данные по таймеру
после 18 строки сделайте задержку в 500-1000 ms
это кривой подход, но просто интересно.
Не помогло....
Задержка 5 сек
Светодиод я выпоял из пульта управления, если что
а, резистор откуда выпоял?
резистор взял из набора ардуино 220R
Насколько помню, если в скетче есть прием и отправка кодов, то нужно выполнять irrecv.enableIRIn(); перед приемом, иначе прием не будет работать. Они одновременно НЕ работают.
точно
https://geektimes.ru/post/271860/
Насколько помню, если в скетче есть прием и отправка кодов, то нужно выполнять irrecv.enableIRIn(); перед приемом, иначе прием не будет работать. Они одновременно НЕ работают.
Большое спасибо!!!!!
Добавил irrecv.enableIRIn(); и заработало.
точно
https://geektimes.ru/post/271860/
Блин, так я же вчера ещё писал Вам, что они по-разному таймер конфигурируюти что разделять надо.
Вроде ж понятно, дернул за запись, она сконфигурировала таймер под себя. Надо читать - заново переинициализируй, чтобы таймер сконфигурировать. Я как-то непонятно написал? Впредь по другому формулировать?
Если вдруг надо будет, вот код:
#include <IRremote.h> #include <IRremoteInt.h> IRsend irsend; IRrecv irrecv(8); decode_results results; int re = 0; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if(re == 1){ int khz = 38; // 38kHz carrier frequency for the NEC protocol unsigned int irSignal[] = {12900,600,2100,550,750,1900,800,1900,750}; //AnalysIR Batch Export (IRremote) - RAW irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz); //Note the approach used to automatically calculate the size of the array. re = 0; irrecv.enableIRIn(); }; if ( irrecv.decode( &results )) { Serial.println(results.value, HEX); if (results.value==0xFF38C7){//5 re=1; }; results.value=0; irrecv.resume(); }; }unsigned int irSignal[] = {12900,600,2100,550,750,1900,800,1900,750}; //AnalysIR Batch Export (IRremote) - RAWДобрый день!
Сталкнулся с аналогичной проблемой. Имеется код, сформированный при помощи программы FLprog. При отправки сигала с пульта, плата реагирует, светодиод моргает, после отправки сигнала с ИК передатчика платы, плата встает. Не могу понять, куда нужно вставить enableIRIn(), если дело в нем...
Есть у кого решение? спасибо!
[ [code] #include <IRremote.h> IRrecv irRessPin12(12); decode_results irRessPin12Res; bool irRessPin12807F807F = 0; bool irRessPin12807FC03F = 0; IRsend _IR_Sender; bool _IR_Sender_1_TOI_27295198 = 0; bool _IR_Sender_1_TOI_152559420 = 0; bool _trgt1 = 0; bool _trgt1I = 0; void setup() { pinMode(8, INPUT_PULLUP); pinMode(4, OUTPUT); irRessPin12.enableIRIn(); } void loop() { if (irRessPin12.decode(&irRessPin12Res)) { irRessPin12FillVar(&irRessPin12Res); irRessPin12.resume(); }else {irRessPin12ResVar(); } //Плата:1 if (!( (digitalRead (8)))) {if (!(_IR_Sender_1_TOI_27295198)) {_irSend(0x807F807F, NEC, 32);} _IR_Sender_1_TOI_27295198 = 1;} else {_IR_Sender_1_TOI_27295198 =0;} if (0) {if (!(_IR_Sender_1_TOI_152559420)) {_irSend(0x807FC03F, NEC, 32);} _IR_Sender_1_TOI_152559420 = 1;} else {_IR_Sender_1_TOI_152559420 =0;} bool _tmp1 = irRessPin12807F807F; if (_tmp1) { if (! _trgt1I) _trgt1 = ! _trgt1; } _trgt1I = _tmp1; digitalWrite(4, !(_trgt1)); } void irRessPin12FillVar(decode_results *irRessPin12Res) { long tempRes; byte tempType; tempRes=(irRessPin12Res->value); tempType=(irRessPin12Res->decode_type); if(!(tempRes == -1)) {if ((tempRes == (0x807F807F))&&(tempType == NEC)) {irRessPin12807F807F = 1;} else {irRessPin12807F807F=0;} if ((tempRes == (0x807FC03F))&&(tempType == NEC)) {irRessPin12807FC03F = 1;} else {irRessPin12807FC03F=0;} }} void irRessPin12ResVar() { irRessPin12807F807F = 0; irRessPin12807FC03F = 0; } void _irSend(long code, byte manufactureCode, byte length) { switch (manufactureCode) { case NEC : _IR_Sender.sendNEC(code, length) ; break; }} [/code]if (0) - это, вообще, что?
if (0) - это, вообще, что?
Или Вас что-то смущает? Вполне законный оператор, спросите у Рабиновича.
Я таки переживаю, зачем он стоит там, вместо того, чтобы быть на строке #1.
unsigned int irSignal[] = {12900,600,2100,550,750,1900,800,1900,750}; //AnalysIR Batch Export (IRremote) - RAWТоже интересно, может кто знает?
У каждого производителя свой протокол.
Описания протоколов в интернете присутствуют.
Ищущий да обрящет.
unsigned int irSignal[] = {12900,600,2100,550,750,1900,800,1900,750}; //AnalysIR Batch Export (IRremote) - RAWТоже интересно, может кто знает?
Мозги-то напрячь сложно? 12900 мкс активен сигнал, 600 пауза, 2100 сигнал, и т.д.
unsigned int irSignal[] = {12900,600,2100,550,750,1900,800,1900,750}; //AnalysIR Batch Export (IRremote) - RAWТоже интересно, может кто знает?
Мозги-то напрячь сложно? 12900 мкс активен сигнал, 600 пауза, 2100 сигнал, и т.д.
:-)))
Как соотносится комбинация 0001110001 (строка ниже) и 9F4FDCF9?