Comments 7
Поэтому 8 команд (включить, выключить, ярче, темнее, белый, красный, синий, розовый) были прочитаны в режиме raw, и каждой команде соответствовал свой массив из 67 unsigned int значений.
Ничего личного, но буквально только что на LORе по другому поводу прочитал такой коммент:
«А чего вы хотите от эмбедщиков? Эти ребята пишут лупы повторением строки эн раз.»
:)
Ну а вообще, если бы у меня такая необходимость появилась, как у автора, то я бы скорее разломал копеечный пульт, и подключал бы его к ардуинке.
>занимает 60% динамической памяти
Это точно константы? Если да, то почему их не завернуть в PROGMEM (i.e. положить в флеш память)?
Судя по строчкам, что у вас там записаны, у вас таки протокол NEC:
2 перехода - преамбула (из-за неточности дискретизации длительность чуть отличается от эталонных 9000 + 4500мкс)
Дальше у вас по 65 переходов, что на самом деле скорее всего 64 перехода = 32 бита.
Самый простейший код на js (чисто чтобы из консоли браузера не выходить) выдаёт такое:
l = [550,550, 600,550, 600,550, 550,600, 550,550, 600,550, 600,550, 550,600,
550,1650, 550,1650, 550,1650, 550,1650, 550,1650, 550,1650, 600,1600, 600,1600, 600,
550, 550,1650, 600,550, 550,1650, 550,600, 550,550, 600,1600, 600,550, 600,1600, 600,
550, 600,1600, 600,550, 550,1650, 550,1650, 550,600, 550,1650, 550];
r = [];
for (var i = 0; i < l.length-1; i+= 2) {
if (l[i+1] > 1000) {
r.push(1);
} else {
r.push(0)
}
}
// r = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1]
Ну и дальше, если посмотреть комментарии к функции отправки ИК-кодов NEC в библиотеки IRemote - то всё сходится. Наверняка можно ещё расковырять, что означает каждый из битов, а можно и на волшебных константах остановиться. И в коде нормально уже писать:
const uint16_t ADDRESS = 0;
const uint8_t COMMAND_ON = 162;
IRData data = {NEC, ADDRESS, COMMAND_ON};
irsend.send(data);
Управление прожекторами при помощи Arduino