На основании этих данных написал скетч для ардуино, эмулирующий пульт.
нумерация кнопок та же.
Код
#include <IRremote.h>
#define _0 609,519
#define _1 609,1647
IRsend irsend;
unsigned int irStart[] = {9105, 4463};
unsigned int irRepeat[] = { 96613, 9105, 2210, _1};
unsigned long lastRepeat;
int cmdId=0,repeatOn=0;
int hz = 40816; // 40816 Hz carrier frequency
unsigned int irSignal[17][64] = {
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _0, _1, _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1}, // RC-58 StandBy
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _1, _0, _0, _1, _0, _0, _0, _0, _0, _1, _1, _0, _1, _1, _1, _1 }, //
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _1, _0, _0, _0, _1, _0, _0, _0, _0, _1, _1, _1, _0, _1, _1, _1 }, //
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _0, _0, _0, _0, _1, _0, _0, _0, _1, _1, _1, _1, _0, _1, _1, _1 }, //
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _0, _1, _0, _0, _1, _0, _0, _0, _1, _0, _1, _1, _0, _1, _1, _1 }, //
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _1, _1, _0, _0, _1, _0, _0, _0, _0, _0, _1, _1, _0, _1, _1, _1 }, //
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _1, _1, _0, _1, _0, _0, _0, _0, _0, _0, _1, _0, _1, _1, _1, _1 }, //
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _0, _1, _1, _0, _0, _0, _0, _0, _1, _0, _0, _1, _1, _1, _1, _1 }, //
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _1, _1, _1, _0, _0, _0, _0, _0, _0, _0, _0, _1, _1, _1, _1, _1 }, //
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _1, _0, _1, _1, _0, _0, _0, _0, _0, _1, _0, _0, _1, _1, _1, _1 }, //
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _1, _1, _0, _0, _0, _0, _0, _0, _0, _0, _1, _1, _1, _1, _1, _1 }, //
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _0, _1, _0, _0, _0, _0, _0, _0, _1, _0, _1, _1, _1, _1, _1, _1 }, //
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _0, _1, _1, _0, _1, _0, _0, _0, _1, _0, _0, _1, _0, _1, _1, _1 }, //
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _0, _0, _0, _1, _0, _0, _0, _0, _1, _1, _1, _0, _1, _1, _1, _1 }, //
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _1, _0, _1, _0, _0, _0, _0, _0, _0, _1, _0, _1, _1, _1, _1, _1 }, //
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _0, _0, _1, _0, _0, _0, _0, _0, _1, _1, _0, _1, _1, _1, _1, _1 }, //
{ _0, _1, _0, _0, _0, _0, _1, _0, _1, _0, _1, _1, _1, _1, _0, _1, _0, _0, _0, _0, _0, _0, _0, _0, _1, _1, _1, _1, _1, _1, _1, _1 } // RC-58 Reset
};
void setup()
{
Serial.begin(9600);
}
void loop() {
String cmd;
while (Serial.available())
{
cmd = Serial.readString();
}
if (cmd.length()) {
if (cmd == "e") {
//stop repeat cur code
cmdId = 0;
} else if(cmd=="r"){
//stop repeat any code
repeatOn=repeatOn?0:1;
}
else{
cmdId = cmd.toInt();
if (cmdId && cmdId < 18) {
RC58send();
Serial.println(cmdId);
}
}
}
if (repeatOn && cmdId && millis() - lastRepeat > 91) {
//repeat
RC58send();
Serial.print("R");
}
}
void RC58send() {
irsend.sendRaw(irStart, 2, hz);
irsend.sendRaw(irSignal[cmdId - 1], 64, hz);
irsend.sendRaw(irRepeat, 5, hz);
lastRepeat = millis();
}
для задания несущей в герцах нужно откорректировать соответствующий код для своего таймера в boarddefs.h, библиотеки IRremote. для 2го таймера это 215 строка:
схема - к соответствующему выводу нужно подсоединить инфракрасный диод через токогасящий резистор. Для атмеги2560 по умолчанию 9 - вывод ардуино.
прога писалась для домашнего кинонотеатра BBK-MA970S. Обучил настраиваемый пульт. Все работает.
отправленная в терминале строка 1 - 17 - номер нажатой кнопки, в соответствии со "считкой" из Omega Remo. "r" - включить/выключить автоповтор. "e" - отключить автоповтор последнего кода.
С кодом повтора по выложенному файлу не разобрался, поэтому в режиме повтора просто заново отправляю всю "посылку"