IRremote и vs1838b. Разные коды со всех ДУ пультов

tobsik
tobsik аватар
Offline
Зарегистрирован: 13.03.2019

Добрый день. Проблема такая: Есть ИК приёмник 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

Но по логике коды должны быть одни и те же или я что-то не понимаю в работе ДУ ИК пультов?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

не понимаете, разные

tobsik
tobsik аватар
Offline
Зарегистрирован: 13.03.2019

ua6em пишет:

не понимаете, разные

 

А не могли бы Вы немного подробнее расписать? 

NikShel
Offline
Зарегистрирован: 21.01.2018

Не правильная у Вас логика.

Если какой-то производитель возьмёт коды другого, то его сразу можно обвинять в плагиате! Я думаю, что наборы кодов поделены между производителями, как частоты в радиоЭфире!!

Сейчас делаю цветомузыку для товарища. Пульт китайский. А над столом висит китайский же лазерный светильник, пультик другой, но светильник всё равно часто реагирует на пульт от цветомузыки. Уже неудобство.

Цветомузыкой, которую ранее сделал для себя, управляю пультиком от старого видака.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Есть стандарты, определенные. Есть ли стандарт на нажатие кнопки «2» на пульте ду?

svm
Offline
Зарегистрирован: 06.11.2016

BOOM пишет:

Есть стандарты, определенные. Есть ли стандарт на нажатие кнопки «2» на пульте ду?

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

SLKH
Offline
Зарегистрирован: 17.08.2015

tobsik пишет:

ua6em пишет:

не понимаете, разные

 

А не могли бы Вы немного подробнее расписать? 

 http://altor1.narod.ru/Articles/IRC.pdf

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

svm пишет:
все лотерейные билеты должны быть выигрышными.

https://www.youtube.com/watch?v=dTFQ4iCj5bQ

tobsik
tobsik аватар
Offline
Зарегистрирован: 13.03.2019

Я скорее всего не правильно выразился. Коды разные каждый раз при нажатии кнопки "2" на одном пульте

sadman41
Offline
Зарегистрирован: 19.10.2016

Может частоты передатчика и приемника не совпадают.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:

Может частоты передатчика и приемника не совпадают.

или библиотека старая или в ней нет вашего пульта

KindMan
Offline
Зарегистрирован: 19.12.2018

У вас модуль или просто ИК приёмник? Как подключен к МК? Если просто запустить программу и не нажимать кнопки, в мониторе порта выскакивают иногда принятые посылки?

tobsik
tobsik аватар
Offline
Зарегистрирован: 13.03.2019

я пробовал и модуль и просто голый ИК приёмник. Пробовал притягивать сигнальный провод к vcc через резистор 2-3 кОм. Принятые посылки возникают если включить общий свет. Только что попробовал китайский пульт ДУ  - на нём тоже постоянно разные коды с одних  и тех же кнопок. Сигнальный выводы подключен к 11 пину pro mini. Менял ардуинку на atmega - такая же картина. 

lean_74
Offline
Зарегистрирован: 22.12.2015

Сменить библиотеку.

sadman41
Offline
Зарегистрирован: 19.10.2016

Ещё тцопы не любят люминисцентное освещение. У меня постоянно мусор из приемника лез, если включал лампу дневного света.

KindMan
Offline
Зарегистрирован: 19.12.2018

tobsik пишет:

Принятые посылки возникают если включить общий свет.
Сигнальный выводы подключен к 11 пину pro mini.


Возникают прям постоянно, или изредка? Если всё подключено правильно, то тогда у вас либо должны быть адские помехи, либо реально "левая" библиотека. Хотя я такого не встречал.
tobsik пишет:

Менял ардуинку на atmega - такая же картина.


Это как?

tobsik
tobsik аватар
Offline
Зарегистрирован: 13.03.2019

KindMan пишет:
возникают прям постоянно, или изредка? Если всё подключено правильно, то тогда у вас либо должны быть адские помехи, либо реально "левая" библиотека. Хотя я такого не встречал.

Помехи очень изредка. Я не думаю, что это из-за освещения, т.к я проверял работу в полной темноте. 

 

 

KindMan пишет:
Это как?

Прошу прощения, под конец дня голова не варила. Менял arduino pro mini на arduino mega.

 

Предполагаю, что библиотека какая-то кривая, но очень странно, т.к я заливал скетч через arduino IDE и через vscod platformio. Там же разные библиотеки  

https://github.com/z3t0/Arduino-IRremote

 

KindMan
Offline
Зарегистрирован: 19.12.2018

Попробуйте пин поменять, на второй, например. Или библиотеку от другова автора.

tobsik
tobsik аватар
Offline
Зарегистрирован: 13.03.2019

разобрался с проблемой.  Проверил с библиотекой  IRLremote - с ней всё ок. Показывает одинаковые коды! Всем спасибо за помощь!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вам про библиотеку уже говорили в #10, в #13, в #15 и в #17! И Вы только сейчас сподобились попробовать? :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

Вам про библиотеку уже говорили в #10, в #13, в #15 и в #17! И Вы только сейчас сподобились попробовать? :)

так там кроме библиотеки вроде и нечему косячить )))