Перенаправление Ir-кодов (подмена пультика :)
- Войдите на сайт для отправки комментариев
Доброго времени форумчане и форумчанки. Решил заморочится, имеется система с пультиком Edifier RC20A* (DA5000Pro -старичок такой). К нему внешний звук на 5.1 Creative RM-820* (Creative Omni). У акустики неочень нужный и неудобный пульт, где по большому счёту нужен только звук... однако при использовании внешнего предварительного усилителя в нем надобност ьвообще пропадает. Решено установить реле отключения питания с пульта у Эдиффера, путём установки внутрь дежурного питания мелкой ProMini и собственно реле. Также решено оставить несколько функций с родного пультика (мутэ, громкость + и -). Скетчик успешно набросан и работает, однако... одна суко кнопка (громкость вверх или +) - нивкакую нехочет, тоетсь остальные по нажатию спустя 300мсек "пробрасывают" нужный код от передатчика Ir - а именно эта нехочет. Если оставить её одну то все пучком, также если прописать НОВЫЕ кнопк иот других пультиков - то все отлично, а эта нет.
Будьте любезны - там кода 10 строк :) посмотрите где собака порылась.
#include <IRremote.h> //Подключаем библиотеку для Ir-сенсора
//=====IR_Sensor*
#define recvPin 2 //Вход Ir-приемника и кнопки пульта
IRrecv irrecv(recvPin);
IRsend irsend;
decode_results results;
uint32_t val;
#define key0 0x832201FE //power
#define key1 0x832204FB //mute
#define key2 0x832206F9 //menu/back
#define key3 0x83220EF1 //up
#define key4 0x832212ED //down
//=====Other_Relay*
#define Out0 5 //Используем цифровой Порт 5 для реле отключения питания
void setup(){
irrecv.enableIRIn(); //Включаем Ir-приёмник
digitalWrite(Out0,LOW);
}
void loop(){
if (irrecv.decode(&results)){
val=results.value;
if (val==key0){ //Принимаемы код с "левого" пульта *power
if (digitalRead(Out0)){ //Проверяем состояние реле
digitalWrite(Out0, LOW);} //Выключаем реле
else{ //Или....
digitalWrite(Out0, HIGH);} //Включаем реле
delay(300);} //Чутку ждём после приёма
else if (val==key1){ //Принимаемы код с "левого" пульта, если нажато *mute
delay(300); //Чутку ждём после приёма
irsend.sendNEC(0x40BEE21D,32);} //Посылаем нужный код с Ir-передатчика *mute
else if (val==key2){ //Если нажато на "левом" пульте *menu/back
delay(300);
irsend.sendNEC(0x40BE28D7,32);} //Посылаем *user
else if (val==key3){ //Если нажато на "левом" пульте *up/\
delay(300);
irsend.sendNEC(0x40BEF00F,32);} //Посылаем *vol up+
else if (val==key4){ //Если нажато на "левом" пульте *down\/
delay(300);
irsend.sendNEC(0x40BEE01F,32);} //Посылаем *vol down-
irrecv.enableIRIn(); //Снова Включаем Ir-приёмник
irrecv.resume(); //Receive the next value
delay(100);
}
}
В кратце... подмениваю
#define key3 0x83220EF1 //up
на
irsend.sendNEC(0x40BEF00F,32);} //Посылаем *vol up+
спасибо!
Господа вы неповерите, все оказалось БАНАЛЬНО просто, но суко вычислить удалось совершенно случайно.
Я чутку поправил код, пока едер релюша 5-ти вольтовая на вкл\выкл всей системы можно поиграться с кодом.
Добавил возможность регулировать эквалайзер (входом в меню и кнопками регулировки громкости подпунктов, высокие, средние, низкие). По аналогии можно (но это лиш запутает) можно регулировтаь громкости самих 5,1 каналов отдельно друг от друга но де-факто все всегда ОДИНАКОВО :) по уровню;
Выполнение "проброса" кнопок тольк опри Включенной системе (чтобы негонять коды когда ненужно);
Вот новый кусочек кода....
#include <IRremote.h> //Подключаем библиотеку для Ir-сенсора //=====IR_Sensor* #define recvPin 2 //Вход Ir-приемника и кнопки пульта IRrecv irrecv(recvPin); IRsend irsend; decode_results results; uint32_t val; #define key0 0x832201FE //power #define key1 0x832204FB //mute #define key2 0x832206F9 //menu/back #define key3 0x83220EF1 //up #define key4 0x832212ED //down #define key5 0x83228E71 //return //=====Other_Relay* #define Out0 5 //Используем цифровой Порт 5 для реле отключения питания byte pwrOn=0; //Флаг Включения реле //=====Menu* byte pos=0; //Позиция эквалайзера void setup(){ irrecv.enableIRIn(); //Включаем Ir-приёмник digitalWrite(Out0,LOW); } void loop(){ if (irrecv.decode(&results)){ val=results.value; //=====Для начаа проверим включено или вЫключено реле питания системы* if (val==key0){ //Принимаемы код с "левого" пульта *power if (digitalRead(Out0)){ //Проверяем состояние реле digitalWrite(Out0,LOW),pwrOn=0; } //Выключаем реле else{ //Или.... digitalWrite(Out0,HIGH),pwrOn=1;} //Включаем реле delay(2000); //Чутку ждём после приёма pos=0; //Устанавливаем позицию меню эквалайзера в начало (громкость) irsend.sendNEC(0x40BE28D7,32);} //Посылаем *user (чтобы звука как надо был сразу) if (pwrOn==1){ //Если питание включено можно "подменивать" команды //=====Перемещение по меню эквалайзера* if (val==key2 && pos<3) {delay(500); pos++;} //Увеличить позицию меню else if (pos==3 && val==key2) {delay(500);pos=0;} //=====Приглушение общей громкости* if (val==key1){ //Принимаемы код с "левого" пульта, если нажато *mute delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEE21D,32);} //Посылаем нужный код с Ir-передатчика *mute //=====Изменение общей громкости* if (val==key3 && pos==0){ //Если нажато на "левом" пульте *up delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEF00F,32);} //Посылаем нужный код с Ir-передатчика *vol up+ else if (val==key4 && pos==0){ //Если нажато на "левом" пульте *down delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEE01F,32);} //Посылаем нужный код с Ir-передатчика *vol down- //=====Изменение высоких частот* if (val==key3 && pos==1){ //Если нажато на "левом" пульте *up delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEFA05,32);} //Посылаем нужный код с Ir-передатчика *treb+ else if (val==key4 && pos==1){ //Если нажато на "левом" пульте *down delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEC23D,32);} //Посылаем нужный код с Ir-передатчика *treb- //=====Изменение средних частот* if (val==key3 && pos==2){ //Если нажато на "левом" пульте *up delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BE7A85,32);} //Посылаем нужный код с Ir-передатчика *middle+ else if (val==key4 && pos==2){ //Если нажато на "левом" пульте *down delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BE42BD,32);} //Посылаем нужный код с Ir-передатчика *middle- //=====Изменение низких частот* if (val==key3 && pos==3){ //Если нажато на "левом" пульте *up delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEDA25,32);} //Посылаем нужный код с Ir-передатчика **bass+ else if (val==key4 && pos==3){ //Если нажато на "левом" пульте *down delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEEA15,32);} //Посылаем нужный код с Ir-передатчика **bass- //=====Выход из настроек эквалайзера* if (val==key5){ //Принимаемы код с "левого" пульта, если нажато *return delay(300); //Чутку ждём после приёма pos=0;} //Просто переходим в начальную позицию эквалайзера (громкость) } irrecv.enableIRIn(); //Снова Включаем Ir-приёмник irrecv.resume(); //Receive the next value delay(100); } }реле скорее всего будет управляться инвернсо (нужно будет заменить HIGH на LOW в коде и все ну и в сетапе)
А теперь почемуже нерегулировалась громкость вверх (точнее непробрасывался код). Все дело в комментарии вида а именно в
/\//Если нажато на "левом" пульте *up/\вот-уж незнаю почему но //-неработало как надо в данном случае
Всё дело в символе \ (обратный слэш) в конце строки 39.
"В стандарте C99 и в C++ описан еще один тип комметариев: //. Он действует в пределах от самой последовательности двух слэшей до следующего перевода строки. Если в конце строки стоит символ \ , считается комментарием и следующая строка."
Получается, у Вас таким образом была закоментирована строка 40. В то же время в строке 42 также есть символ \ , но он не последний в строке. Поэтому там всё нормально.
Спасибо я помоему вкурил... если коментить целые куски кода в начале /* то все что после невыполнялось и так до символа */
А тут ну почти тоже самое только ктобы знал что простое "графическое" якобы описание кнопки стрелками вниз :) так себя поведёт..
/* да, большой многострочный кусок кода комментируем так */
// одну строку комментируем так, но в конце не должно быть символа \ , иначе закомментируется и строка ниже этой
Тут один мелкий НО пакостный момент (я его предвидел но недумал чт оон так помешает)...
это собственно время нахождения в менюшках эквалайзера. Сейчас нахождение там и перемещение собственно осуществляется тремя кнопочками (вход\выход - одна и две вверх и вниз (уменьшение\увеличение). Саи думаю понимаете что они нужны разово а вот регулятор громкости чащще (постоянно). И пока я невыйду из меню в pos=0 (регулировка громкости\уровня звука) то мои кнопки вверх\вниз работают в pos=1,2,3 попытался впихнуть некий таймер, задав в переменных:
и вход\выход в меню эквалайзера:
//=====Вход в меню эквалайзера* if (val==key2){ //Принимаемы код с "левого" пульта, если нажато *mute delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BED02F,32); //Посылаем нужный код с Ir-передатчика *func if (millis()-prvMlstimeM>5000) //Проверяем интервал для обновления prvMlstimeM=millis(), pos=0;} //Если времы вЫшло возвращаемся в регулировку громкости //=====Перемещение по меню эквалайзера* if (val==key2 && pos<3) {delay(500); pos++;} //Увеличить позицию меню else if (pos==3 && val==key2) {delay(500);pos=0;} //=====Изменение общей громкости* if (val==key3 && pos==0){ //Если нажато на "левом" пульте *up delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEF00F,32);} //Посылаем нужный код с Ir-передатчика *vol up+ else if (val==key4 && pos==0){ //Если нажато на "левом" пульте *down delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEE01F,32);} //Посылаем нужный код с Ir-передатчика *vol down-и собственно ничегошеньки невыходит ни спустя 5 сек ни болше, я так и нахожусь в pos=1,2,3,0 - в зависимости от последней выбранной по key2
Выручайте пожалста!
Плохо видно уровень вложенности ifов с таким выравниванием кода. Нажмите Ctrl+T в Arduino IDE и отредактируйте своё сообщение.
И что за конструкция такая в строке 06? Почему prvMlstimeM=millis(), pos=0; через запятую?
Сори поправил, кусочек от самого loop :)
void loop(){ if (irrecv.decode(&results)){ val=results.value; //=====Для начала проверим включено или вЫключено реле питания системы* if (val==key0){ //Принимаемы код с "левого" пульта *power if (digitalRead(Out0)){ //Проверяем состояние реле digitalWrite(Out0,LOW), pwrOn=0;} //Выключаем реле else{ //Или.... digitalWrite(Out0,HIGH),pwrOn=1;} //Включаем реле delay(2000); //Чутку ждём после приёма pos=0; //Устанавливаем позицию меню эквалайзера в начало (громкость) if (pwrOn==1){ irsend.sendNEC(0x40BE28D7,32);} //Посылаем *user (чтобы звук как надо был сразу) } if (pwrOn==1){ //Если питание включено можно "подменивать" команды //=====Приглушение общей громкости* if (val==key1){ //Принимаемы код с "левого" пульта, если нажато *mute delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEE21D,32);} //Посылаем нужный код с Ir-передатчика *mute //=====Вход в меню эквалайзера* if (val==key2){ //Принимаемы код с "левого" пульта, если нажато *menu/back delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BED02F,32); //Посылаем нужный код с Ir-передатчика *func if (millis()-prvMlstimeM>5000) //Проверяем интервал для обновления prvMlstimeM=millis(); pos=0;} //Если времы вЫшло возвращаемся в регулировку громкости //=====Перемещение по меню эквалайзера* if (val==key2 && pos<3){delay(500); pos++;} //Увеличить позицию меню else if (pos==3 && val==key2){delay(500);pos=0;} //=====Изменение общей громкости* if (val==key3 && pos==0){ //Если нажато на "левом" пульте *up delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEF00F,32);} //Посылаем нужный код с Ir-передатчика *vol up+ else if (val==key4 && pos==0){ //Если нажато на "левом" пульте *down delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEE01F,32);} //Посылаем нужный код с Ir-передатчика *vol down-может нахождению в меню тоже присвоить флаг, и опускать его по истечении времени? только я немогу понять как описать это кодом....
Ещё запятые в 7, 9 строках. В 24 строке после if() надо фигурные скобки. В общем, перепешите сначала все if...else таким образом:
if(условие) { действие1; действие2; } else { действие1; действие2; }Вместо запятой - точка с зяпятой и с переносом на следующую строку. И в последнем примере количество открытых фигурных скобок не соотсветствует количеству закрытых.
Упс... счас счас (хотя скобки обычно проверяются и не скомпилируеш, ошибки выдаст в комменте). Счас всё поправлю.....
Решил докопатсья до сути и понять почему не возвращается pos-0; когда ей положено, решил помониторить в Serial.prin всю кухню кода. И обнаружил, что где бы я незапускал таймер он всегда останавливался если отсутсвовало нажатие кнопок (я так понял закрывающая скобка } был не на месте. Когда она была на месте :) код работал как хотел, мог включать реле черз:
unsigned long prvMlstimeM=0; //Предыдущее показание обновления таймера
и так далее. Вобщем решил пойти простым путем и создал допонительно функцию таймера void timer(){...} которая выполнялась бы при само собой включенном основном реле и любой позиции в меню эквалайзера отлиной от 0, тоесть везде кроме общей ГРОМКОСТИ
В Serial.print вывел позицию в меню и собственно сами millis:
Serial.print("pos ");
Serial.println(pos);
Serial.println("***");
Serial.print("imeM ");
Serial.println(prvMlstimeM);
и обнаружил когда и при каких скобках { } всё выполнялось правильно :) Теперь работает все как надо идаже при случайном нажатии спустя 15 сек уже небудеш вместо громкости по каналам регулировать басы и психовать :(
Собственно полностью рабочий и готовый код (убрал mute, потмоу как совсем ненужно и совпадает с mute звуковой карты, сами понимаете может случиться шахматный пордядок и при выключенной аккустике и нажатом на звковухе mute обратное без полной синхронизации невозможно):
#include <IRremote.h> //Подключаем библиотеку для Ir-сенсора //=====IR_Sensor* #define recvPin 2 //Вход Ir-приемника и кнопки пульта IRrecv irrecv(recvPin); IRsend irsend; decode_results results; uint32_t val; #define key0 0x832201FE //power #define key1 0x40BEE21D //mute #define key2 0x832206F9 //menu/back #define key3 0x83220EF1 //up #define key4 0x832212ED //down #define key5 0x83228E71 //return //=====Other_Relay* #define Out0 5 //Используем цифровой Порт 5 для реле отключения питания byte pwrOn=0; //Флаг Включения реле //=====Menu* byte pos=0; //Позиция эквалайзера //=====Delays* unsigned long prvMlstimeM=0; //Предыдущее показание обновления таймера меню эквалайзера void setup(){ Serial.begin(9600); irrecv.enableIRIn(); //Включаем Ir-приёмник digitalWrite(Out0,LOW); } //=====Запуск таймера при нахождении в меню эквалайзера* void timer(){ if (pos!=0){ //Если находимся в любой позицц меню эквалайзера if (millis()-prvMlstimeM>15000){ //Проверяем интервал для обновления prvMlstimeM=millis(); pos=0; //Если времы вЫшло возвращаемся в регулировку громкости } } } void loop(){ if (irrecv.decode(&results)){ val=results.value; //=====Для начала проверим включено или вЫключено реле питания системы* if (val==key0){ //Принимаемы код с "левого" пульта *power if (digitalRead(Out0)){ //Проверяем состояние реле digitalWrite(Out0,LOW), pwrOn=0;} //Выключаем реле else{ //Или.... digitalWrite(Out0,HIGH),pwrOn=1;} //Включаем реле pos=0; //Устанавливаем позицию меню эквалайзера в начало (громкость) delay(3000); //Чутку ждём после приёма if (pwrOn==1){ //Когда включилось питание (реле) irsend.sendNEC(0x40BE28D7,32);} //Посылаем *user (чтобы звук как надо был сразу) } if (pwrOn==1){ //Если питание включено можно "подменивать" команды timer(); //Запускаем таймер, чтобы случайно не управлять эквалайзером //=====Приглушение общей громкости* // if (val==key1){ //Принимаемы код с "левого" пульта, если нажато *mute // delay(300); //Чутку ждём после приёма // irsend.sendNEC(0x40BEE21D,32);} //Посылаем нужный код с Ir-передатчика *mute //=====Вход в меню эквалайзера* if (val==key2){ //Принимаемы код с "левого" пульта, если нажато *menu/back delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BED02F,32);} //Посылаем нужный код с Ir-передатчика *func //=====Перемещение по меню эквалайзера* if (val==key2 && pos<3){delay(500); pos++;} //Увеличить позицию меню else if (pos==3 && val==key2){delay(500);pos=0;} //=====Изменение общей громкости* if (val==key3 && pos==0){ //Если нажато на "левом" пульте *up delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEF00F,32);} //Посылаем нужный код с Ir-передатчика *vol up+ else if (val==key4 && pos==0){ //Если нажато на "левом" пульте *down delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEE01F,32);} //Посылаем нужный код с Ir-передатчика *vol down- //=====Изменение низких частот* if (val==key3 && pos==1){ //Если нажато на "левом" пульте *up delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEDA25,32);} //Посылаем нужный код с Ir-передатчика *bass+ else if (val==key4 && pos==1){ //Если нажато на "левом" пульте *down delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEEA15,32);} //Посылаем нужный код с Ir-передатчика *bass- //=====Изменение средних частот* if (val==key3 && pos==2){ //Если нажато на "левом" пульте *up delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BE7A85,32);} //Посылаем нужный код с Ir-передатчика *middle+ else if (val==key4 && pos==2){ //Если нажато на "левом" пульте *down delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BE42BD,32);} //Посылаем нужный код с Ir-передатчика *middle- //=====Изменение высоких частот* if (val==key3 && pos==3){ //Если нажато на "левом" пульте *up delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEFA05,32);} //Посылаем нужный код с Ir-передатчика *treb+ else if (val==key4 && pos==3){ //Если нажато на "левом" пульте *down delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEC23D,32);} //Посылаем нужный код с Ir-передатчика *treb- //=====Выход из настроек эквалайзера* if (val==key5){ //Принимаемы код с "левого" пульта, если нажато *return delay(300); //Чутку ждём после приёма pos=0; } //Просто переходим в начальную позицию эквалайзера (громкость) } irrecv.enableIRIn(); //Снова Включаем Ir-приёмник irrecv.resume(); //Receive the next value delay(100); } }Спасибо за участие в моей беде!
Решил выложить готовый проект с фоточками :( ну малоли пригодится такая фигня с приёмо-передатчиком Ir.
Незнаю почему разработчики такой недешовой аккустики (более 500уе) незаложили функцию вЫключения с пульта (только с тумблера сзади корпуса), а применили так standbay усилителя но питалово всеарвно подается на транс и всё схему. Внутри стоит довольно мощный тороидальный транс с двумя оботками (питание УМЗЧ - духполярное). Ну да несуть... Вобщем в разрыв цепи 220В (после тумблера и предохранителя вставлено 5В реле. Питание (дежурное в моем случае) от ЗУ для мобильных устройств, импульсное, ровно 4,82В :). С помощью ардуинки и тестового скетка нашёл data - провод что идет с лицевой панели (там установлен IR приёмник, и кнопки упрвления громкостью и эквалайзером). Прям она плате распаял параельный Ir-приёмник- которй и будет принимать "изменнёные команды любого другого пульта). Т.к. са усилок выполнен в корпусе саба там все отлично загерметизировано и проклеено НЕПЛОХИМ термоклеем. Сначал хотел на Proini замутить но чую придётся иногда и коды кнопок менять да и так с nano прощще прошиваться итп.
В итоге почемуто !!!! при рАзмокнутой 220В цепи (один провод разрывается) БП для Ардуинки что т овыдает.. это заметно по постоянному миганию светика питания на ней, с одним Бп это 1Гц с дургим 0,5Гц, может это как то связано именно с трансформтаором что также в параели подключен но также рАзомкнут одним концом при этом. Вобщем немешает но странно (ардуинка то в любом случае выключена).
вот код, добавил снижение громкости при выключении (чтобы небахало) как и при включении и удержание кнопки 0xfffffff имеется ввиду (ноечень удобно клацать кнопками лучьше держать)
#include <IRremote.h> //Подключаем библиотеку для Ir-сенсора //=====IR_Sensor* #define recvPin 2 //Вход Ir-приемника и кнопки пульта IRrecv irrecv(recvPin); IRsend irsend; decode_results results; uint32_t val; #define key0 0x832201FE //power #define key1 0x40BEE21D //mute #define key2 0x832206F9 //menu/back #define key3 0x83220EF1 //up #define key4 0x832212ED //down #define key5 0x83228E71 //return //=====Other_Relay* #define Out0 4 //Используем цифровой Порт 4 для реле отключения питания byte pwrOn=0; //Флаг Включения реле //=====Menu* byte pos=0; //Позиция эквалайзера //=====Delays* unsigned long prvMlstimeM=0; //Предыдущее показание обновления таймера меню эквалайзера void setup(){ irrecv.enableIRIn(); //Включаем Ir-приёмник pinMode(Out0,OUTPUT); //Определяем инверсные выход реле digitalWrite(Out0,HIGH); //Определяем выход реле как вЫключенный } //=====Запуск таймера при нахождении в меню эквалайзера* void timer(){ if (pos!=0){ //Если находимся в любой позицц меню эквалайзера if (millis()-prvMlstimeM>20000){ //Проверяем интервал для обновления prvMlstimeM=millis(); pos=0;} //Если времы вЫшло возвращаемся в регулировку громкости } } void loop(){ if (irrecv.decode(&results)){ if (results.value != 0xFFFFFFFF){ //Если прищёл пакет и этот пакет не FF val=results.value;} //=====Для начала проверим включено или вЫключено реле питания системы* if (val==key0){ //Принимаемы код с "левого" пульта *power if (digitalRead(Out0)){ //Проверяем состояние реле digitalWrite(Out0,LOW), pwrOn=1;} //Включаем реле else{ //Или.... delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BEE21D,32); //Посылаем нужный код с Ir-передатчика *mute (чтобы неБОМБило) delay(4000); //Ожидаем когда общая громкость упадет до "0" digitalWrite(Out0,HIGH),pwrOn=0;} //Выключаем реле pos=0; //Устанавливаем позицию меню эквалайзера в начало (громкость) if (pwrOn==1){ //Когда включилось питание (реле) delay(4000); //Ожидаем когда общая громкость поднимется до "нужного" irsend.sendNEC(0x40BE28D7,32);} //Посылаем *user (чтобы звук как надо был сразу) } if (pwrOn==1){ //Если питание включено можно "подменивать" команды timer(); //Запускаем таймер, чтобы случайно не управлять эквалайзером //=====Приглушение общей громкости* // if (val==key1){ //Принимаемы код с "левого" пульта, если нажато *mute // delay(300); //Чутку ждём после приёма // irsend.sendNEC(0x40BEE21D,32);} //Посылаем нужный код с Ir-передатчика *mute //=====Вход в меню эквалайзера* if (val==key2){ //Принимаемы код с "левого" пульта, если нажато *menu/back delay(300); //Чутку ждём после приёма irsend.sendNEC(0x40BED02F,32);} //Посылаем нужный код с Ir-передатчика *func //=====Перемещение по меню эквалайзера* if (val==key2 && pos<3){delay(500); pos++;} //Увеличить позицию меню else if (pos==3 && val==key2){delay(500);pos=0;} //=====Изменение общей громкости* if (val==key3 && pos==0){ //Если нажато на "левом" пульте *up delay(400); //Чутку ждём после приёма irsend.sendNEC(0x40BEF00F,32);} //Посылаем нужный код с Ir-передатчика *vol up+ else if (val==key4 && pos==0){ //Если нажато на "левом" пульте *down delay(400); //Чутку ждём после приёма irsend.sendNEC(0x40BEE01F,32);} //Посылаем нужный код с Ir-передатчика *vol down- //=====Изменение низких частот* if (val==key3 && pos==1){ //Если нажато на "левом" пульте *up delay(400); //Чутку ждём после приёма irsend.sendNEC(0x40BEDA25,32);} //Посылаем нужный код с Ir-передатчика *bass+ else if (val==key4 && pos==1){ //Если нажато на "левом" пульте *down delay(400); //Чутку ждём после приёма irsend.sendNEC(0x40BEEA15,32);} //Посылаем нужный код с Ir-передатчика *bass- //=====Изменение средних частот* if (val==key3 && pos==2){ //Если нажато на "левом" пульте *up delay(400); //Чутку ждём после приёма irsend.sendNEC(0x40BE7A85,32);} //Посылаем нужный код с Ir-передатчика *middle+ else if (val==key4 && pos==2){ //Если нажато на "левом" пульте *down delay(400); //Чутку ждём после приёма irsend.sendNEC(0x40BE42BD,32);} //Посылаем нужный код с Ir-передатчика *middle- //=====Изменение высоких частот* if (val==key3 && pos==3){ //Если нажато на "левом" пульте *up delay(400); //Чутку ждём после приёма irsend.sendNEC(0x40BEFA05,32);} //Посылаем нужный код с Ir-передатчика *treb+ else if (val==key4 && pos==3){ //Если нажато на "левом" пульте *down delay(400); //Чутку ждём после приёма irsend.sendNEC(0x40BEC23D,32);} //Посылаем нужный код с Ir-передатчика *treb- //=====Выход из настроек эквалайзера* if (val==key5){ //Принимаемы код с "левого" пульта, если нажато *return pos=0;} //Просто переходим в начальную позицию эквалайзера (громкость) } irrecv.enableIRIn(); //Снова Включаем Ir-приёмник irrecv.resume(); //Receive the next value delay(100); } }И фото внутри: