IRremote и vs1838b. Разные коды со всех ДУ пультов
- Войдите на сайт для отправки комментариев
Втр, 12/11/2019 - 20:45
Добрый день. Проблема такая: Есть ИК приёмник vs1838b. Стандартный скетч из примеров библиотеки IRremote - IRCrecvDumpV2.
//------------------------------------------------------------------------------
// Include the IRremote library header
//
#include <IRremote.h>
//------------------------------------------------------------------------------
// Tell IRremote which Arduino pin is connected to the IR Receiver (TSOP4838)
//
int recvPin = 11;
IRrecv irrecv(recvPin);
//+=============================================================================
// Configure the Arduino
//
void setup ( )
{
Serial.begin(9600); // Status message will be sent to PC at 9600 baud
irrecv.enableIRIn(); // Start the receiver
}
//+=============================================================================
// Display IR code
//
void ircode (decode_results *results)
{
// Panasonic has an Address
if (results->decode_type == PANASONIC) {
Serial.print(results->address, HEX);
Serial.print(":");
}
// Print Code
Serial.print(results->value, HEX);
}
//+=============================================================================
// Display encoding type
//
void encoding (decode_results *results)
{
switch (results->decode_type) {
default:
case UNKNOWN: Serial.print("UNKNOWN"); break ;
case NEC: Serial.print("NEC"); break ;
case SONY: Serial.print("SONY"); break ;
case RC5: Serial.print("RC5"); break ;
case RC6: Serial.print("RC6"); break ;
case DISH: Serial.print("DISH"); break ;
case SHARP: Serial.print("SHARP"); break ;
case JVC: Serial.print("JVC"); break ;
case SANYO: Serial.print("SANYO"); break ;
case MITSUBISHI: Serial.print("MITSUBISHI"); break ;
case SAMSUNG: Serial.print("SAMSUNG"); break ;
case LG: Serial.print("LG"); break ;
case WHYNTER: Serial.print("WHYNTER"); break ;
case AIWA_RC_T501: Serial.print("AIWA_RC_T501"); break ;
case PANASONIC: Serial.print("PANASONIC"); break ;
case DENON: Serial.print("Denon"); break ;
}
}
//+=============================================================================
// Dump out the decode_results structure.
//
void dumpInfo (decode_results *results)
{
// Check if the buffer overflowed
if (results->overflow) {
Serial.println("IR code too long. Edit IRremoteInt.h and increase RAWLEN");
return;
}
// Show Encoding standard
Serial.print("Encoding : ");
encoding(results);
Serial.println("");
// Show Code & length
Serial.print("Code : ");
ircode(results);
Serial.print(" (");
Serial.print(results->bits, DEC);
Serial.println(" bits)");
}
//+=============================================================================
// Dump out the decode_results structure.
//
void dumpRaw (decode_results *results)
{
// Print Raw data
Serial.print("Timing[");
Serial.print(results->rawlen-1, DEC);
Serial.println("]: ");
for (int i = 1; i < results->rawlen; i++) {
unsigned long x = results->rawbuf[i] * USECPERTICK;
if (!(i & 1)) { // even
Serial.print("-");
if (x < 1000) Serial.print(" ") ;
if (x < 100) Serial.print(" ") ;
Serial.print(x, DEC);
} else { // odd
Serial.print(" ");
Serial.print("+");
if (x < 1000) Serial.print(" ") ;
if (x < 100) Serial.print(" ") ;
Serial.print(x, DEC);
if (i < results->rawlen-1) Serial.print(", "); //',' not needed for last one
}
if (!(i % 8)) Serial.println("");
}
Serial.println(""); // Newline
}
//+=============================================================================
// Dump out the decode_results structure.
//
void dumpCode (decode_results *results)
{
// Start declaration
Serial.print("unsigned int "); // variable type
Serial.print("rawData["); // array name
Serial.print(results->rawlen - 1, DEC); // array size
Serial.print("] = {"); // Start declaration
// Dump data
for (int i = 1; i < results->rawlen; i++) {
Serial.print(results->rawbuf[i] * USECPERTICK, DEC);
if ( i < results->rawlen-1 ) Serial.print(","); // ',' not needed on last one
if (!(i & 1)) Serial.print(" ");
}
// End declaration
Serial.print("};"); //
// Comment
Serial.print(" // ");
encoding(results);
Serial.print(" ");
ircode(results);
// Newline
Serial.println("");
// Now dump "known" codes
if (results->decode_type != UNKNOWN) {
// Some protocols have an address
if (results->decode_type == PANASONIC) {
Serial.print("unsigned int addr = 0x");
Serial.print(results->address, HEX);
Serial.println(";");
}
// All protocols have data
Serial.print("unsigned int data = 0x");
Serial.print(results->value, HEX);
Serial.println(";");
}
}
//+=============================================================================
// The repeating section of the code
//
void loop ( )
{
decode_results results; // Somewhere to store the results
if (irrecv.decode(&results)) { // Grab an IR code
dumpInfo(&results); // Output the results
dumpRaw(&results); // Output the results in RAW format
dumpCode(&results); // Output the results as source code
Serial.println(""); // Blank line between entries
irrecv.resume(); // Prepare for the next value
}
}
При нажатии 1 кнопки с любого пульта (Tv samsung, сплит система и т.д) - коды получаются всегда разные. Вот пример кодов кнопки вкл\выкл телевизора samsung.
Encoding : UNKNOWN
Code : CA15F541 (32 bits)
Timing[67]:
+1150, -1100 + 150, - 450 + 150, - 400 + 150, - 400
+ 150, - 150 + 150, - 150 + 100, - 150 + 150, - 150
+ 150, - 100 + 150, - 450 + 150, - 400 + 150, - 400
+ 150, - 150 + 150, - 100 + 150, - 150 + 150, - 150
+ 150, - 100 + 150, - 150 + 150, - 400 + 150, - 150
+ 150, - 100 + 150, - 150 + 150, - 150 + 150, - 100
+ 150, - 150 + 150, - 400 + 150, - 150 + 150, - 400
+ 150, - 400 + 150, - 450 + 150, - 400 + 150, - 400
+ 150, - 400 + 150
unsigned int rawData[67] = {1150,1100, 150,450, 150,400, 150,400, 150,150, 150,150, 100,150, 150,150, 150,100, 150,450, 150,400, 150,400, 150,150, 150,100, 150,150, 150,150, 150,100, 150,150, 150,400, 150,150, 150,100, 150,150, 150,150, 150,100, 150,150, 150,400, 150,150, 150,400, 150,400, 150,450, 150,400, 150,400, 150,400, 150}; // UNKNOWN CA15F541
Encoding : UNKNOWN
Code : 2E066217 (32 bits)
Timing[67]:
+1150, -1150 + 100, - 450 + 150, - 400 + 150, - 450
+ 100, - 150 + 150, - 150 + 100, - 200 + 100, - 150
+ 150, - 100 + 150, - 450 + 150, - 400 + 150, - 400
+ 150, - 150 + 150, - 150 + 100, - 150 + 150, - 150
+ 150, - 150 + 100, - 150 + 150, - 400 + 150, - 150
+ 150, - 150 + 100, - 150 + 150, - 150 + 150, - 150
+ 100, - 150 + 150, - 450 + 100, - 150 + 150, - 400
+ 150, - 450 + 100, - 450 + 150, - 400 + 150, - 400
+ 150, - 450 + 100
unsigned int rawData[67] = {1150,1150, 100,450, 150,400, 150,450, 100,150, 150,150, 100,200, 100,150, 150,100, 150,450, 150,400, 150,400, 150,150, 150,150, 100,150, 150,150, 150,150, 100,150, 150,400, 150,150, 150,150, 100,150, 150,150, 150,150, 100,150, 150,450, 100,150, 150,400, 150,450, 100,450, 150,400, 150,400, 150,450, 100}; // UNKNOWN 2E066217
Encoding : UNKNOWN
Code : 37550D69 (32 bits)
Timing[67]:
+1150, -1150 + 100, - 450 + 150, - 400 + 150, - 400
+ 150, - 150 + 150, - 150 + 100, - 150 + 150, - 150
+ 150, - 100 + 150, - 450 + 150, - 400 + 150, - 400
+ 150, - 150 + 150, - 150 + 100, - 150 + 150, - 150
+ 150, - 100 + 150, - 150 + 150, - 400 + 150, - 150
+ 150, - 150 + 100, - 150 + 150, - 150 + 150, - 100
+ 150, - 150 + 150, - 400 + 150, - 150 + 150, - 400
+ 150, - 450 + 100, - 450 + 150, - 400 + 150, - 400
+ 150, - 450 + 100
unsigned int rawData[67] = {1150,1150, 100,450, 150,400, 150,400, 150,150, 150,150, 100,150, 150,150, 150,100, 150,450, 150,400, 150,400, 150,150, 150,150, 100,150, 150,150, 150,100, 150,150, 150,400, 150,150, 150,150, 100,150, 150,150, 150,100, 150,150, 150,400, 150,150, 150,400, 150,450, 100,450, 150,400, 150,400, 150,450, 100}; // UNKNOWN 37550D69
Encoding : UNKNOWN
Code : 9F3BA567 (32 bits)
Timing[67]:
+1100, -1150 + 150, - 400 + 150, - 400 + 150, - 450
+ 150, - 100 + 150, - 150 + 150, - 150 + 100, - 150
+ 150, - 150 + 150, - 400 + 150, - 400 + 150, - 450
+ 100, - 150 + 150, - 150 + 150, - 100 + 150, - 150
+ 150, - 150 + 150, - 100 + 150, - 450 + 100, - 150
+ 150, - 150 + 150, - 100 + 150, - 150 + 150, - 150
+ 150, - 100 + 150, - 450 + 100, - 150 + 150, - 400
+ 150, - 450 + 150, - 400 + 150, - 400 + 150, - 450
+ 100, - 450 + 150
unsigned int rawData[67] = {1100,1150, 150,400, 150,400, 150,450, 150,100, 150,150, 150,150, 100,150, 150,150, 150,400, 150,400, 150,450, 100,150, 150,150, 150,100, 150,150, 150,150, 150,100, 150,450, 100,150, 150,150, 150,100, 150,150, 150,150, 150,100, 150,450, 100,150, 150,400, 150,450, 150,400, 150,400, 150,450, 100,450, 150}; // UNKNOWN 9F3BA567
Но по логике коды должны быть одни и те же или я что-то не понимаю в работе ДУ ИК пультов?
не понимаете, разные
не понимаете, разные
А не могли бы Вы немного подробнее расписать?
Не правильная у Вас логика.
Если какой-то производитель возьмёт коды другого, то его сразу можно обвинять в плагиате! Я думаю, что наборы кодов поделены между производителями, как частоты в радиоЭфире!!
Сейчас делаю цветомузыку для товарища. Пульт китайский. А над столом висит китайский же лазерный светильник, пультик другой, но светильник всё равно часто реагирует на пульт от цветомузыки. Уже неудобство.
Цветомузыкой, которую ранее сделал для себя, управляю пультиком от старого видака.
Есть стандарты, определенные. Есть ли стандарт на нажатие кнопки «2» на пульте ду?
Есть стандарты, определенные. Есть ли стандарт на нажатие кнопки «2» на пульте ду?
Так можно стандарты на все ввести, все автомобильные сигнализации должны откликаться на любой пульт, ключи от сейфов и все лотерейные билеты должны быть выигрышными.
не понимаете, разные
А не могли бы Вы немного подробнее расписать?
https://www.youtube.com/watch?v=dTFQ4iCj5bQ
Я скорее всего не правильно выразился. Коды разные каждый раз при нажатии кнопки "2" на одном пульте
Может частоты передатчика и приемника не совпадают.
Может частоты передатчика и приемника не совпадают.
или библиотека старая или в ней нет вашего пульта
У вас модуль или просто ИК приёмник? Как подключен к МК? Если просто запустить программу и не нажимать кнопки, в мониторе порта выскакивают иногда принятые посылки?
я пробовал и модуль и просто голый ИК приёмник. Пробовал притягивать сигнальный провод к vcc через резистор 2-3 кОм. Принятые посылки возникают если включить общий свет. Только что попробовал китайский пульт ДУ - на нём тоже постоянно разные коды с одних и тех же кнопок. Сигнальный выводы подключен к 11 пину pro mini. Менял ардуинку на atmega - такая же картина.
Сменить библиотеку.
Ещё тцопы не любят люминисцентное освещение. У меня постоянно мусор из приемника лез, если включал лампу дневного света.
Принятые посылки возникают если включить общий свет.
Сигнальный выводы подключен к 11 пину pro mini.
Возникают прям постоянно, или изредка? Если всё подключено правильно, то тогда у вас либо должны быть адские помехи, либо реально "левая" библиотека. Хотя я такого не встречал.
Менял ардуинку на atmega - такая же картина.
Это как?
Помехи очень изредка. Я не думаю, что это из-за освещения, т.к я проверял работу в полной темноте.
Прошу прощения, под конец дня голова не варила. Менял arduino pro mini на arduino mega.
Предполагаю, что библиотека какая-то кривая, но очень странно, т.к я заливал скетч через arduino IDE и через vscod platformio. Там же разные библиотеки
https://github.com/z3t0/Arduino-IRremote
Попробуйте пин поменять, на второй, например. Или библиотеку от другова автора.
разобрался с проблемой. Проверил с библиотекой IRLremote - с ней всё ок. Показывает одинаковые коды! Всем спасибо за помощь!
Вам про библиотеку уже говорили в #10, в #13, в #15 и в #17! И Вы только сейчас сподобились попробовать? :)
Вам про библиотеку уже говорили в #10, в #13, в #15 и в #17! И Вы только сейчас сподобились попробовать? :)
так там кроме библиотеки вроде и нечему косячить )))