Здравствуйте, нужна помощь. Не получается получить с ИК пульта код кнопки для дальнейшего использования. Получаю со всех кнопок или 0, или fffff. Попробовал разные скетчи, предположил что не совпадает частота работы пульта и приемника (взял пульт и ик порт от рабочего набора для управления RGB лентой), результат один и тот же. Вот крайний скеч с которым экспериментировал, тут получаю ноли.
#include <IRremote.h>
int irPin = 3;
IRrecv IrReciver(irPin);
decode_results results;
void setup() {
Serial.begin(9600);
IrReciver.enableIRIn();
}
void loop() {
if (IrReciver.decode()) {
Serial.println( results.value, HEX );
IrReciver.resume();
}
}
Ардуино
- Автор
- Сообщение
-
Не в сети
- Сообщения: 825
- Зарегистрирован: 26 май 2013 10:07
- Откуда: Минск, KO33tv
Re: Ардуино
Возможно, не подходит универсальная библиотека IRremote.
Если пульт китайский (а каким ему еще быть ?
), можно попробовать библиотеку https://www.arduinolibraries.info/libraries/nec-decoder
Скетч для определения протокола пульта:Кстати, код FFFFFFFF пульт может выдавать при длительном нажатии кнопки.

Если пульт китайский (а каким ему еще быть ?

Скетч для определения протокола пульта:
Код: Выделить всё
#define RECEIVER_PIN 2 // define the IR receiver pin
IRrecv receiver(RECEIVER_PIN); // create a receiver object of the IRrecv class
decode_results results; // create a results object of the decode_results class
unsigned long key_value = 0; // variable to store the pressed key value
void setup() {
Serial.begin(9600); // begin serial communication with a baud rate of 9600
receiver.enableIRIn(); // enable the receiver
receiver.blink13(true); // enable blinking of the built-in LED when an IR signal is received
}
void loop() {
if (receiver.decode(&results)) {
if (results.value == 0XFFFFFFFF) {
results.value = key_value;
}
Serial.println(results.value, HEX);
switch (results.decode_type) {
case NEC:
Serial.println("NEC");
break;
case SONY:
Serial.println("SONY");
break;
case RC5:
Serial.println("RC5");
break;
case RC6:
Serial.println("RC6");
break;
case DISH:
Serial.println("DISH");
break;
case SHARP:
Serial.println("SHARP");
break;
case JVC:
Serial.println("JVC");
break;
case SANYO:
Serial.println("SANYO");
break;
case MITSUBISHI:
Serial.println("MITSUBISHI");
break;
case SAMSUNG:
Serial.println("SAMSUNG");
break;
case LG:
Serial.println("LG");
break ;
case WHYNTER:
Serial.println("WHYNTER");
break;
case AIWA_RC_T501:
Serial.println("AIWA_RC_T501");
break;
case PANASONIC:
Serial.println("PANASONIC");
break;
case DENON:
Serial.println("DENON");
break;
case BOSEWAVE:
Serial.println("BOSEWAVE");
break;
case LEGO_PF:
Serial.println("LEGO_PF");
break;
case MAGIQUEST:
Serial.println("MAGIQUEST");
break;
default:
case UNKNOWN:
Serial.println("UNKNOWN");
break ;
}
key_value = results.value;
receiver.resume();
}
}

_________________
73! EW1Q
ex EU1AQ, UC2AAQ
73! EW1Q
ex EU1AQ, UC2AAQ
-
Не в сети
- Сообщения: 616
- Зарегистрирован: 25 дек 2015 08:48
Re: Ардуино
Спасибо за ответ.
Вот так все получилось.
#include "IRremote.h"
IRrecv irrecv(2); // указываем вывод, к которому подключен приемник
decode_results results;
void setup() {
Serial.begin(9600); // выставляем скорость COM порта
irrecv.enableIRIn(); // запускаем прием
}
void loop() {
if ( irrecv.decode( &results )) { // если данные пришли
Serial.println( results.value, HEX ); // печатаем данные
irrecv.resume(); // принимаем следующую команду
}
}
Вот так все получилось.
#include "IRremote.h"
IRrecv irrecv(2); // указываем вывод, к которому подключен приемник
decode_results results;
void setup() {
Serial.begin(9600); // выставляем скорость COM порта
irrecv.enableIRIn(); // запускаем прием
}
void loop() {
if ( irrecv.decode( &results )) { // если данные пришли
Serial.println( results.value, HEX ); // печатаем данные
irrecv.resume(); // принимаем следующую команду
}
}
_________________
https://vk.com/public119472661
https://vk.com/public119472661
-
Не в сети
- Сообщения: 825
- Зарегистрирован: 26 май 2013 10:07
- Откуда: Минск, KO33tv