76

Re: BD37534FV+LCD2004+энкодер+ИК пульт

2. В этом окне регулировка осталась в обратном порядке. Нажимаешь +, идет обратный отсчет, и наоборот. Значения частоты в Hz переключает верно. Может так задумано?

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

77

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Вопрос. STANDBY работает, на выходе пин 7 присутствует +5в. Какой ток он выдает. Так понял, что на прямую мелкое реле туда не подцепить. Надо ставить транзисторный ключ? Просто я с ардуиной никогда дела не имел.

Ток нагрузки не более 20 мА, 5 В подают на вход STANDBY усилителя, если такого входа нет, то ставят транзисторный ключ с реле для подачи питания на усилитель.

78

Re: BD37534FV+LCD2004+энкодер+ИК пульт

http://forum.rcl-radio.ru/uploads/images/2022/04/cc1a99599e094aae536babc11d239572.png

Убирать дБ, делать регулировку от 0 до 94? Или оставить, так как регулировка идет от -79 до +15 дБ, рекомендую аттенюатор выше 0 дБ не делать.

79

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Извините, только добрался до компа.
В первом окне "Громкость" 0-100

Могу сделать фиксировано, дошли до предела то все дальше не переключит и так же дошли до минимума, все дальше не перескакивает на наибольшее значение

Лучше фиксировано.

Ток нагрузки не более 20 мА, 5 В подают на вход STANDBY усилителя, если такого входа нет, то ставят транзисторный ключ с реле для подачи питания на усилитель.

Спасибо. Сегодня уже освоил эту тему.

Делать только в громкости или во всех параметрах, например тембр -20...+20 дБ , так и оставить? или 0...40 сделать?  

Логичнее тембры -20...+20

Убирать дБ, делать регулировку от 0 до 94? Или оставить, так как регулировка идет от -79 до +15 дБ, рекомендую аттенюатор выше 0 дБ не делать.

Вы поставили меня немного в тупик. Что бы оценить это, мне нужно услышать звук или тестовую музыку.  В бар графиках с нулевой точкой это выглядело бы нагляднее. Понимаю, что это не возможно осуществить физически. Оставьте пока как есть.
Завтра на работе покручу ардуинку и подумаю. Ардуинка живет пока на работе, а я всего не помню.
Когда закончите править скетч, выложите пож. его целиком сюда.

80 (2022-04-20 15:35:11 отредактировано Allkor)

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Сегодня обнаружил еще один глюк...
http://forum.rcl-radio.ru/uploads/images/2022/04/27e089242c182a5f4338b9d3df29d842.jpeg
не всегда, но появляется когда крутишь энкодер, с пульта вроде нет. Если опять покрутить, то пропадает.

Хотел уточнить по назначению окон.

Первое окно "Уровни". VOL, BASS, MID,TREB.
Логичнее такое раположение строк VOL,TREB, MID, BASS , так как бас редко крутят, а вот средние и высокие крутят намного чаще. А так придется постояно перепрыгивать через бас на средние и высокие.
VOL регулирует громкость в условных единицах от 0 до 100.
BASS, MID,TREB -20...+20 дБ, это логично.
Если BASS, MID,TREB выставить в 0, то это равносильно отключению эквалайзера?

Второе окно "Эквалайзер"
Начало и конец настроек фиксированные. 
BASS и TREB желательно поменять местами.
Для чего служит окно LOUD?

Третье окно "Уровни каналов".

так как регулировка идет от -79 до +15 дБ, рекомендую аттенюатор выше 0 дБ не делать.

Вы мня убедили, пусть остаются -75...+15 дБ. Так будет лучьше. Тогда получается у меня с пульта все регулируется верно.
Так понимаю, что от 0 до +15 пойдут какие то искажения и перегруз.Что будет являтся причиной этих искажений? Сам усилитель, процессор или входной сигнал?

Окно входов от 0 до 100

81

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Тестирование:

Исправлено меню 1
Исправлена работа меню 2, в том числе работа ик пульта в этом меню
Исправлено меню коммутатора входов

#define IR_1 0xFF629D // Кнопка вверх
#define IR_2 0xFFA857 // Кнопка вниз 
#define IR_3 0xFFC23D // Кнопка >
#define IR_4 0xFF22DD // Кнопка <
#define IR_5 0xFFE01F // Кнопка IN 
#define IR_6 0xFF02FD // Кнопка MENU2 
#define IR_7 0xFFE21D // Кнопка MUTE 
#define IR_8 0xFFA25D // Кнопка STANDBY (POWER)
/*
#define IR_1 0x33B8A05F // Кнопка вверх
#define IR_2 0x33B8609F // Кнопка вниз 
#define IR_3 0x33B810EF // Кнопка >
#define IR_4 0x33B8E01F // Кнопка <
#define IR_5 0x33B844BB // Кнопка IN 
#define IR_6 0x33B8946B // Кнопка MENU2  
#define IR_7 0x33B850AF // Кнопка MUTE 
#define IR_8 0x33B800FF // Кнопка STANDBY (POWER)
*/


#include <Wire.h> 
#include <LiquidCrystal_I2C.h>  // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <BD37534FV.h>          // https://github.com/liman324/BD37534FV/archive/master.zip
#include <Encoder.h>            // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <EEPROM.h>
#include <MsTimer2.h>           // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <boarddefs.h>
#include <IRremote.h>           // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip
   BD37534FV bd; 
   LiquidCrystal_I2C lcd(0x27,20,4);  // Устанавливаем дисплей
   IRrecv irrecv(12); // указываем вывод модуля IR приемника
   Encoder myEnc(9, 8);// DT, CLK
   decode_results ir; 
   byte a1[8] = {0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
   byte a2[8] = {0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
   byte a3[8] = {0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000}; 
   byte a4[8] = {0b10000,0b11000,0b11100,0b11110,0b11100,0b11000,0b10000,0b00000}; 
   unsigned long time,times_in,oldPosition  = -999,newPosition; 
   byte in,in_x,w,w1,w2[4],w3,z,z0,z1,q,i,n,www,gr1,gr2,mute,power;
   int menu,menu0,menu_1,menu_2,vol,bass,treb,mid,vol_d,bass_d,treb_d,mid_d;
   int temp0,gain0,gain1,gain2,gain3,gain_d;
   int bass_f,bass_q,treb_f,treb_q,mid_f,mid_q,loud_f,loud_g;
   int lf,rf,lr,rr,sub,sub_f,faza,par;
   byte mesto[8]={4,13,4,13,4,13,4,13};
   byte mesto1[8]={0,0,1,1,2,2,3,3};
   byte mesto2[7]={0,11,0,11,11,0,11};
   byte mesto3[7]={0,0,1,1,2,3,3};
   String bass_nam[4]={"60   Hz", "80   Hz", "100  Hz", "120  Hz"};
   String treb_nam[4]={"7.5 kHz", "10  kHz", "12.5kHz", "15  kHz"};
   String mid_nam[4] ={"500  Hz", "1   kHz", "1.5 kHz", "2.5 kHz"};
   String lon_nam[4] ={"250  Hz", "400  Hz", "800  Hz", "disable"};
   String sub_nam[5] ={" OFF   ", " 55  Hz", " 85  Hz", " 120 Hz", " 160 Hz"};
   float bass_nam_1[4]={0.5, 1.0, 1.5, 2.0};
   float mid_nam_1[4]={0.75, 1.0, 1.25, 1.5};
   float treb_nam_1[2]={0.75, 1.25};

void setup() {Serial.begin(9600);
  irrecv.enableIRIn();lcd.init();lcd.backlight();
  lcd.setCursor(0,1);lcd.print("    PRIVET RAIL");lcd.setCursor(0,2);lcd.print("        ***"); delay(2000);
  lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);lcd.createChar(3,a4);
  pinMode(10,INPUT);  // МЕНЮ КНОПКА SW энкодера
  pinMode(2,INPUT);   // МЕНЮ НАСТРОЕК
  pinMode(3,INPUT);   // IN
  pinMode(4,INPUT);// КНОПКА MUTE
  pinMode(5,INPUT);// КНОПКА STANDBY
  pinMode(7,OUTPUT);//  STANDBY
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  if(EEPROM.read(100)!=0){for(int i=0;i<100;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
  vol = EEPROM.read(0)-79;treb = EEPROM.read(1)-20;mid = EEPROM.read(2)-20;bass = EEPROM.read(3)-20;
  in = EEPROM.read(4);gain1 = EEPROM.read(5);gain2 = EEPROM.read(6);gain3 = EEPROM.read(7);
  bass_f = EEPROM.read(8);bass_q = EEPROM.read(9);treb_f = EEPROM.read(10);treb_q = EEPROM.read(11);
  mid_f = EEPROM.read(12);mid_q = EEPROM.read(13);loud_f = EEPROM.read(14);loud_g= EEPROM.read(15);
  lf = EEPROM.read(16)-79;rf = EEPROM.read(17)-79;lr = EEPROM.read(18)-79;rr = EEPROM.read(19)-79;sub = EEPROM.read(20)-79;sub_f = EEPROM.read(21);
  faza = EEPROM.read(22);
  w2_arr();audio();cl();
}

void loop(){
  if(mute==0){
  if(digitalRead(10)==LOW&&menu0==0){menu++;delay(200);time=millis();w=1;w2_arr();if(menu>3){menu=0;}}// меню 0
  if(digitalRead(10)==LOW&&menu0==1){menu_1++;delay(200);time=millis();w=1;if(menu_1>7){menu_1=0;}}// меню 1
  if(digitalRead(10)==LOW&&menu0==2){menu_2++;delay(200);time=millis();w=1;if(menu_2>6){menu_2=0;}}// меню 2
 
  if(digitalRead(2)==HIGH){menu0++;cl();delay(200);time=millis();w=1;w2_arr();menu=0;menu_1=0;menu_2=0;if(menu0>2){menu0=0;}}// меню
  if(digitalRead(3)==HIGH){in++;cl();times_in=millis();in_x=1;w3=1;www=1;menu0=100;if(in>2){in=0;}}// IN
  }
  if(digitalRead(4)==HIGH&&mute==0&&power==0){mute=1;cl();w=1;w2_arr();lcd.setCursor(8,1);lcd.print("MUTE");menu0=100;audio();}// mute on
  if(digitalRead(4)==HIGH&&mute==1&&power==0){mute=0;cl();time=millis();w=1;w2_arr();menu0=0;myEnc.write(0);audio();}// mute off

  if(digitalRead(5)==HIGH&&power==0){power=1;mute=1;audio();lcd.clear();lcd.setCursor(5,1);lcd.print("POWER  OFF");menu0=100;delay(3000);lcd.noBacklight();}// power off
  if(digitalRead(5)==HIGH&&power==1){power=0;mute=0;audio();lcd.backlight();lcd.clear();lcd.setCursor(5,1);lcd.print("POWER   ON ");w=1;w2_arr();menu0=0;myEnc.write(0);audio();delay(3000);lcd.clear();}// power on
  if(power==0){digitalWrite(7,HIGH);}if(power==1){digitalWrite(7,LOW);} // выход STANDBY

  ////////////////////// IR /////////////////////////////////////////////////
  if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
  if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта
   if(mute==0){
   if(ir.value==IR_2&&menu0==0){menu++;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu>3){menu=0;}}//  кнопка вверх 
   if(ir.value==IR_1&&menu0==0){menu--;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu<0){menu=3;}}//  кнопка вниз
   if(ir.value==IR_2&&menu0==1){menu_1++;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu_1>7){menu_1=0;}}//  кнопка вверх 
   if(ir.value==IR_1&&menu0==1){menu_1--;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu_1<0){menu_1=7;}}//  кнопка вниз
   if(ir.value==IR_2&&menu0==2){menu_2++;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu_2>6){menu_2=0;}}//  кнопка вверх 
   if(ir.value==IR_1&&menu0==2){menu_2--;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu_2<0){menu_2=6;}}//  кнопка вниз
 
   if(ir.value==IR_6){menu0++;in_x=0;gr1=0;gr2=0;cl();time=millis();w=1;w2_arr();menu=0;menu_1;menu_2;if(menu0>2){menu0=0;}}//  кнопка MENU
   if(ir.value==IR_5){in++;gr1=0;gr2=0;cl();times_in=millis();in_x=1;w3=1;www=1;menu0=100;if(in>2){in=0;}}//  кнопка IN
   }
   if(ir.value==IR_7&&mute==0&&power==0){mute=1;cl();w=1;w2_arr();lcd.setCursor(8,1);lcd.print("MUTE");menu0=100;audio();}// mute on
   if(ir.value==IR_7&&mute==1&&power==0){mute=0;cl();time=millis();w=1;w2_arr();menu0=0;myEnc.write(0);audio();}// mute off

   if(ir.value==IR_8&&power==0){power=1;mute=1;audio();cl();lcd.setCursor(5,1);lcd.print("POWER  OFF");menu0=100;delay(3000);lcd.noBacklight();}// power off
   if(ir.value==IR_8&&power==1){power=0;mute=0;audio();lcd.backlight();cl();lcd.setCursor(5,1);lcd.print("POWER   ON ");w=1;w2_arr();menu0=0;myEnc.write(0);audio();delay(3000);lcd.clear();}// power on
   
   /////////////////////////////// MENU0 = VOLUME TERBLE MIDDLE BASS ///////////////////////////////////////////////////////////////////////
  if(menu0==0){
    switch(menu){
      case 0: temp0 = vol;q=0;break;
      case 1: temp0 = treb;q=1;break;
      case 2: temp0 = mid;q=2;break;
      case 3: temp0 = bass;q=3;break;
      }
 
     if(ir.value==IR_3){temp0++;gr1=1;gr2=0;cl1();time=millis();w=1;w2[q]=1;www=1;}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){temp0++;gr2=0;cl1();time=millis();;w=1;w2[q]=1;www=1;}// кнопка >>>>>>
     if(ir.value==IR_4){temp0--;gr1=0;gr2=1;cl1();time=millis();;w=1;w2[q]=1;www=1;}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){temp0--;gr1=0;cl1();time=millis();w=1;w2[q]=1;www=1;}// кнопка <<<<<<   
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2[q]=1;www=1;} 
 
     switch(menu){
      case 0: vol = temp0;vol_func();break;
      case 1: treb = temp0;treb_func();break;
      case 2: mid = temp0;mid_func();break;
      case 3: bass = temp0;bass_func();break;
      }
 
   au();
   for(i=0;i<4;i++){if(menu==i){lcd.setCursor(0,i);lcd.write((uint8_t)3);}else{lcd.setCursor(0,i);lcd.print(" ");}}
   lcd.setCursor(1,0);lcd.print("VOLUME ");if(map(vol,-79,15,0,100)<10){lcd.print(" ");}if(map(vol,-79,15,0,100)<100){lcd.print(" ");}
     lcd.print(map(vol,-79,15,0,100));lcd.print(" ");vol_d=map(vol,-79,15,0,21);
   lcd.setCursor(1,1);lcd.print("TREBLE ");if(treb>-10){lcd.print(" ");}if(treb<10&&treb>=0){lcd.print(" ");}
     lcd.print(treb);lcd.print(" ");treb_d=map(treb,-20,20,0,21);
   lcd.setCursor(1,2);lcd.print("MIDDLE ");if(mid>-10){lcd.print(" ");}if(mid<10&&mid>=0){lcd.print(" ");}
     lcd.print(mid);lcd.print(" ");mid_d=map(mid,-20,20,0,21);
   lcd.setCursor(1,3);lcd.print("BASS   ");if(bass>-10){lcd.print(" ");}if(bass<10&&bass>=0){lcd.print(" ");}
     lcd.print(bass);lcd.print(" ");bass_d=map(bass,-20,20,0,21);
   
   for(n=0;n<4;n++){if(w2[n]==1){
   switch(n){
    case 0: par = vol_d;break;
    case 1: par = treb_d;break;
    case 2: par = mid_d;break;
    case 3: par = bass_d;break;
    } 
   for(z=0,z0=0,z1=0;z<=par;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+12,n);lcd.write((uint8_t)0);lcd.setCursor(z0+1+12,n);lcd.print("  ");}}
   if(z1==3){lcd.setCursor(z0+12,n);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+12,n);lcd.write((uint8_t)2);}w2[n]=0;}
   }}// menu0 = 0
///////////////////////////////////////////////////////////////////////////////////////////////
  
 ///////////////////// MENU 2 ////////////////////////////////////////////////////////
 if(menu0==1){
  switch(menu_1){
      case 0: temp0 = bass_f;break;
      case 1: temp0 = bass_q;break;
      case 2: temp0 = mid_f;break;
      case 3: temp0 = mid_q;break;
      case 4: temp0 = treb_f;break;
      case 5: temp0 = treb_q;break;
      case 6: temp0 = loud_f;break;
      case 7: temp0 = loud_g;break;}
 
     if(ir.value==IR_3){temp0++;gr1=1;gr2=0;cl1();time=millis();w=1;www=1;}// кнопка > 
   //  if(ir.value==0xFFFFFFFF and gr1==1){temp0++;gr2=0;cl1();time=millis();w=1;www=1;}// кнопка >>>>>>
     if(ir.value==IR_4){temp0--;gr1=0;gr2=1;cl1();time=millis();;w=1;www=1;}// кнопка <
   //  if(ir.value==0xFFFFFFFF and gr2==1){temp0--;gr1=0;cl1();time=millis();w=1;www=1;}// кнопка <<<<<<     
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;www=1;} 
 
     switch(menu_1){
      case 0: bass_f = temp0;bass_f_func();break;
      case 1: bass_q = temp0;bass_q_func();break;
      case 2: mid_f = temp0;mid_f_func();break;
      case 3: mid_q = temp0;mid_q_func();break;
      case 4: treb_f = temp0;treb_f_func();break;
      case 5: treb_q = temp0;treb_q_func();break;
      case 6: loud_f = temp0;loud_f_func();break;
      case 7: loud_g = temp0;loud_g_func();break;}
 
  au();
  for(i=0;i<8;i++){if(menu_1==i){lcd.setCursor(mesto[i],mesto1[i]);lcd.write((uint8_t)3);}else{lcd.setCursor(mesto[i],mesto1[i]);lcd.print(" ");}}
  lcd.setCursor(0,0);lcd.print("BASS");lcd.setCursor(5,0);lcd.print(bass_nam[bass_f]);lcd.setCursor(14,0);lcd.print("Q ");lcd.print(bass_nam_1[bass_q]);
  lcd.setCursor(0,1);lcd.print("MIDD");lcd.setCursor(5,1);lcd.print(mid_nam[mid_f]);lcd.setCursor(14,1);lcd.print("Q ");lcd.print(mid_nam_1[mid_q]);
  lcd.setCursor(0,2);lcd.print("TREB");lcd.setCursor(5,2);lcd.print(treb_nam[treb_f]);lcd.setCursor(14,2);lcd.print("Q ");lcd.print(treb_nam_1[treb_q]);
  lcd.setCursor(0,3);lcd.print("LOUD");lcd.setCursor(5,3);lcd.print(lon_nam[loud_f]);lcd.setCursor(14,3);lcd.print("G ");lcd.print(loud_g/10);lcd.print(loud_g%10);lcd.setCursor(18,3);lcd.print("dB");
  }// menu0 = 1
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  if(menu0==2){
     switch(menu_2){
      case 0: temp0 = lf;break;
      case 1: temp0 = rf;break;
      case 2: temp0 = lr;break;
      case 3: temp0 = rr;break;
      case 4: temp0 = faza;break;
      case 5: temp0 = sub;break;
      case 6: temp0 = sub_f;break;}
 
     if(ir.value==IR_3){temp0++;gr1=1;gr2=0;cl1();time=millis();w=1;www=1;}// кнопка > 
     if(ir.value==0xFFFFFFFF && gr1==1){temp0++;gr2=0;cl1();time=millis();w=1;www=1;}// кнопка >>>>>>
     if(ir.value==IR_4){temp0--;gr1=0;gr2=1;cl1();time=millis();;w=1;www=1;}// кнопка <
     if(ir.value==0xFFFFFFFF && gr2==1){temp0--;gr1=0;cl1();time=millis();w=1;www=1;}// кнопка <<<<<<     
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;www=1;} 
 
     switch(menu_2){
      case 0: lf = temp0;lf_func();break;
      case 1: rf = temp0;rf_func();break;
      case 2: lr = temp0;lr_func();break;
      case 3: rr = temp0;rr_func();break;
      case 4: faza = temp0;faza_func();break;
      case 5: sub = temp0;sub_func();break;
      case 6: sub_f = temp0;sub_f_func();break;}
 
  au();
  for(i=0;i<7;i++){if(menu_2==i){lcd.setCursor(mesto2[i],mesto3[i]);lcd.write((uint8_t)3);}else{lcd.setCursor(mesto2[i],mesto3[i]);lcd.print(" ");}}
  lcd.setCursor(1,0);lcd.print("LF");lcd.setCursor(4,0);lcd.print(lf);lcd.print(" ");lcd.setCursor(7,0);lcd.print("dB ");lcd.setCursor(12,0);lcd.print("RF ");lcd.print(rf);lcd.print(" ");lcd.setCursor(18,0);lcd.print("dB");
  lcd.setCursor(1,1);lcd.print("LR");lcd.setCursor(4,1);lcd.print(lr);lcd.print(" ");lcd.setCursor(7,1);lcd.print("dB ");lcd.setCursor(12,1);lcd.print("RR ");lcd.print(rr);lcd.print(" ");lcd.setCursor(18,1);lcd.print("dB");
  lcd.setCursor(1,2);lcd.print("Subwoofer");lcd.setCursor(12,2);lcd.print("Faza ");if(faza==0){lcd.print("  0");}else{lcd.print("180");}
  lcd.setCursor(1,3);lcd.print("G ");lcd.setCursor(4,3);lcd.print(sub);lcd.print(" ");lcd.setCursor(7,3);lcd.print("dB ");lcd.setCursor(12,3);lcd.print(sub_nam[sub_f]);
 } // menu0 = 2


 ////////////////////////// GAIN IN /////////////////////////////////////////////////////////////////////////////////////
if(in_x==1){ menu0=100;
   switch(in){
     case 0: gain0 = gain1;break;
     case 1: gain0 = gain2;break;
     case 2: gain0 = gain3;break;}
 
     if(ir.value==IR_3){gain0++;gr1=1;gr2=0;cl1();time=millis();times_in=millis();www=1;w=1;w3=1;gain_func();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){gain0++;gr2=0;cl1();time=millis();times_in=millis();www=1;w=1;w3=1;gain_func();}// кнопка >>>>>>
     if(ir.value==IR_4){gain0--;gr1=0;gr2=1;cl1();time=millis();times_in=millis();www=1;w=1;w3=1;gain_func();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){gain0--;gr1=0;cl1();time=millis();times_in=millis();www=1;w=1;w3=1;gain_func();}// кнопка <<<<<<  
 
    if (newPosition != oldPosition) {oldPosition = newPosition;
    gain0=gain0+newPosition;myEnc.write(0);newPosition=0;time=millis();times_in=millis();www=1;w=1;w3=1;gain_func();} 
 
   switch(in){
     case 0: gain1 = gain0;break;
     case 1: gain2 = gain0;break;
     case 2: gain3 = gain0;break;}
 
  au();
  lcd.setCursor(2,1);lcd.print("BXOD ");
  switch(in){
    case 0: lcd.print("MP3");break;
    case 1: lcd.print(" TV");break;
    case 2: lcd.print("AUX");break;
    }
  lcd.setCursor(11,1);lcd.print(" ");lcd.print(gain0);lcd.print(" ");lcd.setCursor(15,1);lcd.print("dB");gain_d=gain0+1;
   if(w3==1){
   for(z=0,z0=0,z1=0;z<=gain_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+7,2);lcd.write((uint8_t)0);lcd.setCursor(z0+1+7,2);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+7,2);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+7,2);lcd.write((uint8_t)2);}} w3=0;
   if(millis()-times_in>3000){in_x=0;cl();menu0=0;w2_arr();}}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   
 
  
  ///////////////////// EEPROM ///////////////////////////////////////////////////////////////         
  if(millis()-time>10000 && w==1){
     EEPROM.update(0,vol+79);EEPROM.update(1,treb+20);EEPROM.update(2,mid+20);EEPROM.update(3,bass+20);
     EEPROM.update(4,in);EEPROM.update(5,gain1);EEPROM.update(6,gain2);EEPROM.update(7,gain3);
     EEPROM.update(8,bass_f);EEPROM.update(9,bass_q);EEPROM.update(10,treb_f);EEPROM.update(11,treb_q),
     EEPROM.update(12,mid_f);EEPROM.update(13,mid_q);EEPROM.update(14,loud_f);EEPROM.update(15,loud_g);
     EEPROM.update(16,lf+79);EEPROM.update(17,rf+79);EEPROM.update(18,lr+79);EEPROM.update(19,rr+79);EEPROM.update(20,sub+79);EEPROM.update(21,sub_f);
     EEPROM.update(22,faza);
     menu=0;menu_1=0;menu_2=0;w=0;w2_arr();}
  
  }// loop

void faza_func(){if(faza>1){faza=1;}if(faza<0){faza=0;}}   
void sub_f_func(){if(sub_f>4){sub_f=4;}if(sub_f<0){sub_f=0;}}
void lf_func(){if(lf<-79){lf=-79;}if(lf>15){lf=15;}};
void rf_func(){if(rf<-79){rf=-79;}if(rf>15){rf=15;}};
void lr_func(){if(lr<-79){lr=-79;}if(lr>15){lr=15;}};
void rr_func(){if(rr<-79){rr=-79;}if(rr>15){rr=15;}};
void sub_func(){if(sub<-79){sub=-79;}if(sub>15){sub=15;}};
void au(){if(www==1){audio();www=0;}}
void loud_f_func(){if(loud_f>3){loud_f=3;}if(loud_f<0){loud_f=0;}}
void loud_g_func(){if(loud_g>20){loud_g=20;}if(loud_g<0){loud_g=0;}}
void mid_q_func(){if(mid_q>3){mid_q=3;}if(mid_q<0){mid_q=0;}}
void treb_q_func(){if(treb_q>1){treb_q=1;}if(treb_q<0){treb_q=0;}}
void bass_q_func(){if(bass_q>3){bass_q=3;}if(bass_q<0){bass_q=0;}}
void mid_f_func(){if(mid_f>3){mid_f=3;}if(mid_f<0){mid_f=0;}}
void treb_f_func(){if(treb_f>3){treb_f=3;}if(treb_f<0){treb_f=0;}}
void bass_f_func(){if(bass_f>3){bass_f=3;}if(bass_f<0){bass_f=0;}}
void gain_func(){if(gain0<0){gain0=0;}if(gain0>20){gain0=20;}}
void bass_func(){if(bass>20){bass=20;}if(bass<-20){bass=-20;}} 
void mid_func(){if(mid>20){mid=20;}if(mid<-20){mid=-20;}}
void treb_func(){if(treb>20){treb=20;}if(treb<-20){treb=-20;}}
void vol_func(){if(vol<-79){vol=-79;}if(vol>15){vol=15;}}
void w2_arr(){w2[0]=1;w2[1]=1;w2[2]=1;w2[3]=1;}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(200);}  


void audio(){
   bd.setSetup_1(1,2,0); // default (1,2,0)
   bd.setSetup_2(sub_f,1,0,faza); 
                   // int sub_f ------ OFF 55Hz 85Hz 120Hz 160Hz = int 0...4
                   // int sub_out ---- LPF Front Rear Prohibition = int 0...3
                   // int level_metr - HOLD REST = int 0..1
                   // int faza ------- 0 180 = int 0...1
   bd.setLoudness_f(loud_f); // 250Hz 400Hz 800Hz Prohibition = int 0...3
   bd.setIn(in); // 0...2
   bd.setIn_gain(gain0,mute); // in_gain -- 0...20 = 0...20 dB, mute -- 0 default 
   bd.setVol(vol); // -79...+15 dB = int -79...15
   bd.setFront_1(rf); // -79...+15 dB = int -79...15
   bd.setFront_2(lf); // -79...+15 dB = int -79...15
   bd.setRear_1(rr); // -79...+15 dB = int -79...15
   bd.setRear_2(lr); // -79...+15 dB = int -79...15
   bd.setSub(sub); // -79...+15 dB = int -79...15
   bd.mix();
   bd.setBass_setup(bass_q,bass_f); // 0.5 1.0 1.5 2.0 --- int 0...3, 60Hz 80Hz 100Hz 120Hz --- int 0...3
   bd.setMiddle_setup(mid_q,mid_f); // 0.75 1.0 1.25 1.5 --- int 0...3, 500Hz 1kHz 1.5kHz 2.5kHz --- int 0...3
   bd.setTreble_setup(treb_q,treb_f); // 0.75 1.25  --- int 0...1, 7.5kHz 10kHz 12.5kHz 15kHz --- int 0...3
   bd.setBass_gain(bass); // --20 ... +20 dB = int -20 ... 20  
   bd.setMiddle_gain(mid); // --20 ... +20 dB = int -20 ... 20
   bd.setTreble_gain(treb); // --20 ... +20 dB = int -20 ... 20   
   bd.setLoudness_gain(loud_g); // 0 ... 20 dB = int 0 ... 20
  }  

void to_Timer(){newPosition = myEnc.read()/4;}   

82

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Большое спасибо. Залил, вроде все нормально.
Осталось дождаться прихода проца.

83

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Уважаемый liman 324 возможно ли добавить тюнер rda5807m, к этому проекту?

84

Re: BD37534FV+LCD2004+энкодер+ИК пульт

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

85 (2022-10-07 21:36:22 отредактировано Allkor)

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Добрый вечер уважаемый liman324!
У меня опять проблема. Расскажу все по порядку.
Весной собрал плату управления на Ардуионо и плату аудиопроцессора.
Плату управления с BD37534FV и LCD2004 запустил, все работало нормально.
Плату аудиопоцессора спаял, но BD37534FV и 10 шт LM7809 долго шли. Оставалось только допаять их. Пришло забросить сборку.
Когда пришли BD37534FV и LM7809, впаял их в плату и включил. Ток на БП выставил около 50ма, LM7809 немного нагрелась. Прибавил ток, лмка нагрелась еще сильнее, а вместе снею начало грется BD37534FV.
Все 10 штук LM7809 оказались брак.
Выписал BD37534FV и на всякий случай LCD2004.
Впаял LM7808 и BD37534FV. Включили, светятся только два ряда квадратиков. При нажатии кнопок дисплей ганет. Запускается только после отключения и включения питания.
Аудиопроц отключил от платы управления. Решил отдельно попробовать запустить плату управления.
Думал, может I2C пальнулся. Заменил  LCD2004. Результат тоже.
Поставил навую Ардуинку, результат тот же.
Пробовал заливать скетчи с шапки и с этой ветки, не помого.
Запустил I2C сканер, он увидел, сейчас точно не помню, что то типа х27.
Залил скетч с темы: Подключение LCD2004 по I2C к Ардуино. Так же светятся два ряда квадратиков, при нажатии кнопок, дисплей гаснет.
На плате ровно 5в., с БП ток выставлял 150ма. SDA и SCL подключены верно.
Всю голову сломал, в чем может быть неисправность и почему не запускается плата управления и 2004....
Может вы что нить подскажите, куда рыть дальше.
Вот боюсь, как бы и новую BD37534FV не грохнулпосвоей глупости...

86

Re: BD37534FV+LCD2004+энкодер+ИК пульт

В скетче нет часов реального времени?

87

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Запустите  I2C сканер , в мониторе порта должен быть адрес дисплея и аудиопроцессора

88

Re: BD37534FV+LCD2004+энкодер+ИК пульт

В скетче нет часов реального времени. Заливал скетчи с шапки на 2004 и 1602.  Раньше с этими скетчами управление работало нормально. Библиотеки ставил вроде те же самые.
В мониторе порта виден только дисплей, тк аудиопроцессор отключен. Завтра попробую подключить аудиопроцессор, если он еще живой..
Как в I2C сканере должны прописываться порты 2004 и BD37534FV?
Интересно, почему не сработал скетч с темы "Подключение LCD2004 по I2C к Ардуино".

89

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Покрутите регулировку контрастности на модуле i2c экрана

90

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Крутил...символы не появляются. Шас поеду на работу и сфотаю.

91

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Добрый вечер уважаемы liman324!
Все не могу добраться до плат. В эти выходные хотел закончить их, но на работе навалили работу.
Маленький отчет по теме.
Похоже, первая Ардуинка откинулась. Пока точно не проверял, но есть подозрения.
По новой Ардуинке. Залил в него сохраненные ранее скетчи, так же горели только два ряда квадратиков.
http://forum.rcl-radio.ru/uploads/images/2022/10/2f712098f836388ae90d61f27bee57ee.jpg
С соединенным процем в мониторе порта видно два железа 0х27 и 0х40.
http://forum.rcl-radio.ru/uploads/images/2022/10/337fa8f0513373e58157ff55f32aecd7.jpg
http://forum.rcl-radio.ru/uploads/images/2022/10/6fdde7120c5740c9d11ad27fb9277bc2.jpg

Залил скетч с "Подключение LCD2004 по I2C к Ардуино", появился текст.
Залил SeriajDisplay, стал перебирать коды.
Залил HelloWorld, появился текст.
Залил сохраненный скетч, две поосы квадратиков.
Залил ваш правленный скетч с 81 поста. Появилось приветствие, кнопка ON/OFF работаеть, MUTE работает.
При нажатии IN открывается меню входов, с энкодера как положено переключает входы, регулирует уровень входного сигнала.
Через несколько сек опять переключатся на меню настойки Громкости,Баса, Средних, Высоких. Энкодер при нажатии прыгает по строкам, крутилка регулирует уровень.
Но никак не могу попассть в Меню2. Пробовал пинцетом перемыкать кнопку, не входит в Меню2. Такое ощущение что кнопка Меню не работает...он никак не реагирует...
Сопротивления подтяжки 10к прозваниваются верно. Кнрпки прозваниваются.
ИК пока не соединял, потерял пульт.
Сейчас отключил питание полностью. Через минуту включаю, опять два ряда квадратиков. Если поновой залить скетч,то опять начинает работать. После откл/включ опять квадратики...
Неужели ардуинка неисправнвная...


Вот ваш скетч, который работает, кроме меню2.

#define IR_1 0xFF629D // Кнопка вверх
#define IR_2 0xFFA857 // Кнопка вниз 
#define IR_3 0xFFC23D // Кнопка >
#define IR_4 0xFF22DD // Кнопка <
#define IR_5 0xFFE01F // Кнопка IN 
#define IR_6 0xFF02FD // Кнопка MENU2 
#define IR_7 0xFFE21D // Кнопка MUTE 
#define IR_8 0xFFA25D // Кнопка STANDBY (POWER)
/*
#define IR_1 0x33B8A05F // Кнопка вверх
#define IR_2 0x33B8609F // Кнопка вниз 
#define IR_3 0x33B810EF // Кнопка >
#define IR_4 0x33B8E01F // Кнопка <
#define IR_5 0x33B844BB // Кнопка IN 
#define IR_6 0x33B8946B // Кнопка MENU2  
#define IR_7 0x33B850AF // Кнопка MUTE 
#define IR_8 0x33B800FF // Кнопка STANDBY (POWER)
*/


#include <Wire.h> 
#include <LiquidCrystal_I2C.h>  // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <BD37534FV.h>          // https://github.com/liman324/BD37534FV/archive/master.zip
#include <Encoder.h>            // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <EEPROM.h>
#include <MsTimer2.h>           // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <boarddefs.h>
#include <IRremote.h>           // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip
   BD37534FV bd; 
   LiquidCrystal_I2C lcd(0x27,20,4);  // Устанавливаем дисплей
   IRrecv irrecv(12); // указываем вывод модуля IR приемника
   Encoder myEnc(9, 8);// DT, CLK
   decode_results ir; 
   byte a1[8] = {0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
   byte a2[8] = {0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
   byte a3[8] = {0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000}; 
   byte a4[8] = {0b10000,0b11000,0b11100,0b11110,0b11100,0b11000,0b10000,0b00000}; 
   unsigned long time,times_in,oldPosition  = -999,newPosition; 
   byte in,in_x,w,w1,w2[4],w3,z,z0,z1,q,i,n,www,gr1,gr2,mute,power;
   int menu,menu0,menu_1,menu_2,vol,bass,treb,mid,vol_d,bass_d,treb_d,mid_d;
   int temp0,gain0,gain1,gain2,gain3,gain_d;
   int bass_f,bass_q,treb_f,treb_q,mid_f,mid_q,loud_f,loud_g;
   int lf,rf,lr,rr,sub,sub_f,faza,par;
   byte mesto[8]={4,13,4,13,4,13,4,13};
   byte mesto1[8]={0,0,1,1,2,2,3,3};
   byte mesto2[7]={0,11,0,11,11,0,11};
   byte mesto3[7]={0,0,1,1,2,3,3};
   String bass_nam[4]={"60   Hz", "80   Hz", "100  Hz", "120  Hz"};
   String treb_nam[4]={"7.5 kHz", "10  kHz", "12.5kHz", "15  kHz"};
   String mid_nam[4] ={"500  Hz", "1   kHz", "1.5 kHz", "2.5 kHz"};
   String lon_nam[4] ={"250  Hz", "400  Hz", "800  Hz", "disable"};
   String sub_nam[5] ={" OFF   ", " 55  Hz", " 85  Hz", " 120 Hz", " 160 Hz"};
   float bass_nam_1[4]={0.5, 1.0, 1.5, 2.0};
   float mid_nam_1[4]={0.75, 1.0, 1.25, 1.5};
   float treb_nam_1[2]={0.75, 1.25};

void setup() {Serial.begin(9600);
  irrecv.enableIRIn();lcd.init();lcd.backlight();
  lcd.setCursor(0,1);lcd.print("    PRIVET RAIL");lcd.setCursor(0,2);lcd.print("        ***"); delay(2000);
  lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);lcd.createChar(3,a4);
  pinMode(10,INPUT);  // МЕНЮ КНОПКА SW энкодера
  pinMode(2,INPUT);   // МЕНЮ НАСТРОЕК
  pinMode(3,INPUT);   // IN
  pinMode(4,INPUT);// КНОПКА MUTE
  pinMode(5,INPUT);// КНОПКА STANDBY
  pinMode(7,OUTPUT);//  STANDBY
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  if(EEPROM.read(100)!=0){for(int i=0;i<100;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
  vol = EEPROM.read(0)-79;treb = EEPROM.read(1)-20;mid = EEPROM.read(2)-20;bass = EEPROM.read(3)-20;
  in = EEPROM.read(4);gain1 = EEPROM.read(5);gain2 = EEPROM.read(6);gain3 = EEPROM.read(7);
  bass_f = EEPROM.read(8);bass_q = EEPROM.read(9);treb_f = EEPROM.read(10);treb_q = EEPROM.read(11);
  mid_f = EEPROM.read(12);mid_q = EEPROM.read(13);loud_f = EEPROM.read(14);loud_g= EEPROM.read(15);
  lf = EEPROM.read(16)-79;rf = EEPROM.read(17)-79;lr = EEPROM.read(18)-79;rr = EEPROM.read(19)-79;sub = EEPROM.read(20)-79;sub_f = EEPROM.read(21);
  faza = EEPROM.read(22);
  w2_arr();audio();cl();
}

void loop(){
  if(mute==0){
  if(digitalRead(10)==LOW&&menu0==0){menu++;delay(200);time=millis();w=1;w2_arr();if(menu>3){menu=0;}}// меню 0
  if(digitalRead(10)==LOW&&menu0==1){menu_1++;delay(200);time=millis();w=1;if(menu_1>7){menu_1=0;}}// меню 1
  if(digitalRead(10)==LOW&&menu0==2){menu_2++;delay(200);time=millis();w=1;if(menu_2>6){menu_2=0;}}// меню 2
 
  if(digitalRead(2)==HIGH){menu0++;cl();delay(200);time=millis();w=1;w2_arr();menu=0;menu_1=0;menu_2=0;if(menu0>2){menu0=0;}}// меню
  if(digitalRead(3)==HIGH){in++;cl();times_in=millis();in_x=1;w3=1;www=1;menu0=100;if(in>2){in=0;}}// IN
  }
  if(digitalRead(4)==HIGH&&mute==0&&power==0){mute=1;cl();w=1;w2_arr();lcd.setCursor(8,1);lcd.print("MUTE");menu0=100;audio();}// mute on
  if(digitalRead(4)==HIGH&&mute==1&&power==0){mute=0;cl();time=millis();w=1;w2_arr();menu0=0;myEnc.write(0);audio();}// mute off

  if(digitalRead(5)==HIGH&&power==0){power=1;mute=1;audio();lcd.clear();lcd.setCursor(5,1);lcd.print("POWER  OFF");menu0=100;delay(3000);lcd.noBacklight();}// power off
  if(digitalRead(5)==HIGH&&power==1){power=0;mute=0;audio();lcd.backlight();lcd.clear();lcd.setCursor(5,1);lcd.print("POWER   ON ");w=1;w2_arr();menu0=0;myEnc.write(0);audio();delay(3000);lcd.clear();}// power on
  if(power==0){digitalWrite(7,HIGH);}if(power==1){digitalWrite(7,LOW);} // выход STANDBY

  ////////////////////// IR /////////////////////////////////////////////////
  if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
  if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта
   if(mute==0){
   if(ir.value==IR_2&&menu0==0){menu++;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu>3){menu=0;}}//  кнопка вверх 
   if(ir.value==IR_1&&menu0==0){menu--;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu<0){menu=3;}}//  кнопка вниз
   if(ir.value==IR_2&&menu0==1){menu_1++;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu_1>7){menu_1=0;}}//  кнопка вверх 
   if(ir.value==IR_1&&menu0==1){menu_1--;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu_1<0){menu_1=7;}}//  кнопка вниз
   if(ir.value==IR_2&&menu0==2){menu_2++;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu_2>6){menu_2=0;}}//  кнопка вверх 
   if(ir.value==IR_1&&menu0==2){menu_2--;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu_2<0){menu_2=6;}}//  кнопка вниз
 
   if(ir.value==IR_6){menu0++;in_x=0;gr1=0;gr2=0;cl();time=millis();w=1;w2_arr();menu=0;menu_1;menu_2;if(menu0>2){menu0=0;}}//  кнопка MENU
   if(ir.value==IR_5){in++;gr1=0;gr2=0;cl();times_in=millis();in_x=1;w3=1;www=1;menu0=100;if(in>2){in=0;}}//  кнопка IN
   }
   if(ir.value==IR_7&&mute==0&&power==0){mute=1;cl();w=1;w2_arr();lcd.setCursor(8,1);lcd.print("MUTE");menu0=100;audio();}// mute on
   if(ir.value==IR_7&&mute==1&&power==0){mute=0;cl();time=millis();w=1;w2_arr();menu0=0;myEnc.write(0);audio();}// mute off

   if(ir.value==IR_8&&power==0){power=1;mute=1;audio();cl();lcd.setCursor(5,1);lcd.print("POWER  OFF");menu0=100;delay(3000);lcd.noBacklight();}// power off
   if(ir.value==IR_8&&power==1){power=0;mute=0;audio();lcd.backlight();cl();lcd.setCursor(5,1);lcd.print("POWER   ON ");w=1;w2_arr();menu0=0;myEnc.write(0);audio();delay(3000);lcd.clear();}// power on
   
   /////////////////////////////// MENU0 = VOLUME TERBLE MIDDLE BASS ///////////////////////////////////////////////////////////////////////
  if(menu0==0){
    switch(menu){
      case 0: temp0 = vol;q=0;break;
      case 1: temp0 = treb;q=1;break;
      case 2: temp0 = mid;q=2;break;
      case 3: temp0 = bass;q=3;break;
      }
 
     if(ir.value==IR_3){temp0++;gr1=1;gr2=0;cl1();time=millis();w=1;w2[q]=1;www=1;}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){temp0++;gr2=0;cl1();time=millis();;w=1;w2[q]=1;www=1;}// кнопка >>>>>>
     if(ir.value==IR_4){temp0--;gr1=0;gr2=1;cl1();time=millis();;w=1;w2[q]=1;www=1;}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){temp0--;gr1=0;cl1();time=millis();w=1;w2[q]=1;www=1;}// кнопка <<<<<<   
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2[q]=1;www=1;} 
 
     switch(menu){
      case 0: vol = temp0;vol_func();break;
      case 1: treb = temp0;treb_func();break;
      case 2: mid = temp0;mid_func();break;
      case 3: bass = temp0;bass_func();break;
      }
 
   au();
   for(i=0;i<4;i++){if(menu==i){lcd.setCursor(0,i);lcd.write((uint8_t)3);}else{lcd.setCursor(0,i);lcd.print(" ");}}
   lcd.setCursor(1,0);lcd.print("VOLUME ");if(map(vol,-79,15,0,100)<10){lcd.print(" ");}if(map(vol,-79,15,0,100)<100){lcd.print(" ");}
     lcd.print(map(vol,-79,15,0,100));lcd.print(" ");vol_d=map(vol,-79,15,0,21);
   lcd.setCursor(1,1);lcd.print("TREBLE ");if(treb>-10){lcd.print(" ");}if(treb<10&&treb>=0){lcd.print(" ");}
     lcd.print(treb);lcd.print(" ");treb_d=map(treb,-20,20,0,21);
   lcd.setCursor(1,2);lcd.print("MIDDLE ");if(mid>-10){lcd.print(" ");}if(mid<10&&mid>=0){lcd.print(" ");}
     lcd.print(mid);lcd.print(" ");mid_d=map(mid,-20,20,0,21);
   lcd.setCursor(1,3);lcd.print("BASS   ");if(bass>-10){lcd.print(" ");}if(bass<10&&bass>=0){lcd.print(" ");}
     lcd.print(bass);lcd.print(" ");bass_d=map(bass,-20,20,0,21);
   
   for(n=0;n<4;n++){if(w2[n]==1){
   switch(n){
    case 0: par = vol_d;break;
    case 1: par = treb_d;break;
    case 2: par = mid_d;break;
    case 3: par = bass_d;break;
    } 
   for(z=0,z0=0,z1=0;z<=par;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+12,n);lcd.write((uint8_t)0);lcd.setCursor(z0+1+12,n);lcd.print("  ");}}
   if(z1==3){lcd.setCursor(z0+12,n);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+12,n);lcd.write((uint8_t)2);}w2[n]=0;}
   }}// menu0 = 0
///////////////////////////////////////////////////////////////////////////////////////////////
  
 ///////////////////// MENU 2 ////////////////////////////////////////////////////////
 if(menu0==1){
  switch(menu_1){
      case 0: temp0 = bass_f;break;
      case 1: temp0 = bass_q;break;
      case 2: temp0 = mid_f;break;
      case 3: temp0 = mid_q;break;
      case 4: temp0 = treb_f;break;
      case 5: temp0 = treb_q;break;
      case 6: temp0 = loud_f;break;
      case 7: temp0 = loud_g;break;}
 
     if(ir.value==IR_3){temp0++;gr1=1;gr2=0;cl1();time=millis();w=1;www=1;}// кнопка > 
   //  if(ir.value==0xFFFFFFFF and gr1==1){temp0++;gr2=0;cl1();time=millis();w=1;www=1;}// кнопка >>>>>>
     if(ir.value==IR_4){temp0--;gr1=0;gr2=1;cl1();time=millis();;w=1;www=1;}// кнопка <
   //  if(ir.value==0xFFFFFFFF and gr2==1){temp0--;gr1=0;cl1();time=millis();w=1;www=1;}// кнопка <<<<<<     
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;www=1;} 
 
     switch(menu_1){
      case 0: bass_f = temp0;bass_f_func();break;
      case 1: bass_q = temp0;bass_q_func();break;
      case 2: mid_f = temp0;mid_f_func();break;
      case 3: mid_q = temp0;mid_q_func();break;
      case 4: treb_f = temp0;treb_f_func();break;
      case 5: treb_q = temp0;treb_q_func();break;
      case 6: loud_f = temp0;loud_f_func();break;
      case 7: loud_g = temp0;loud_g_func();break;}
 
  au();
  for(i=0;i<8;i++){if(menu_1==i){lcd.setCursor(mesto[i],mesto1[i]);lcd.write((uint8_t)3);}else{lcd.setCursor(mesto[i],mesto1[i]);lcd.print(" ");}}
  lcd.setCursor(0,0);lcd.print("BASS");lcd.setCursor(5,0);lcd.print(bass_nam[bass_f]);lcd.setCursor(14,0);lcd.print("Q ");lcd.print(bass_nam_1[bass_q]);
  lcd.setCursor(0,1);lcd.print("MIDD");lcd.setCursor(5,1);lcd.print(mid_nam[mid_f]);lcd.setCursor(14,1);lcd.print("Q ");lcd.print(mid_nam_1[mid_q]);
  lcd.setCursor(0,2);lcd.print("TREB");lcd.setCursor(5,2);lcd.print(treb_nam[treb_f]);lcd.setCursor(14,2);lcd.print("Q ");lcd.print(treb_nam_1[treb_q]);
  lcd.setCursor(0,3);lcd.print("LOUD");lcd.setCursor(5,3);lcd.print(lon_nam[loud_f]);lcd.setCursor(14,3);lcd.print("G ");lcd.print(loud_g/10);lcd.print(loud_g%10);lcd.setCursor(18,3);lcd.print("dB");
  }// menu0 = 1
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  if(menu0==2){
     switch(menu_2){
      case 0: temp0 = lf;break;
      case 1: temp0 = rf;break;
      case 2: temp0 = lr;break;
      case 3: temp0 = rr;break;
      case 4: temp0 = faza;break;
      case 5: temp0 = sub;break;
      case 6: temp0 = sub_f;break;}
 
     if(ir.value==IR_3){temp0++;gr1=1;gr2=0;cl1();time=millis();w=1;www=1;}// кнопка > 
     if(ir.value==0xFFFFFFFF && gr1==1){temp0++;gr2=0;cl1();time=millis();w=1;www=1;}// кнопка >>>>>>
     if(ir.value==IR_4){temp0--;gr1=0;gr2=1;cl1();time=millis();;w=1;www=1;}// кнопка <
     if(ir.value==0xFFFFFFFF && gr2==1){temp0--;gr1=0;cl1();time=millis();w=1;www=1;}// кнопка <<<<<<     
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;www=1;} 
 
     switch(menu_2){
      case 0: lf = temp0;lf_func();break;
      case 1: rf = temp0;rf_func();break;
      case 2: lr = temp0;lr_func();break;
      case 3: rr = temp0;rr_func();break;
      case 4: faza = temp0;faza_func();break;
      case 5: sub = temp0;sub_func();break;
      case 6: sub_f = temp0;sub_f_func();break;}
 
  au();
  for(i=0;i<7;i++){if(menu_2==i){lcd.setCursor(mesto2[i],mesto3[i]);lcd.write((uint8_t)3);}else{lcd.setCursor(mesto2[i],mesto3[i]);lcd.print(" ");}}
  lcd.setCursor(1,0);lcd.print("LF");lcd.setCursor(4,0);lcd.print(lf);lcd.print(" ");lcd.setCursor(7,0);lcd.print("dB ");lcd.setCursor(12,0);lcd.print("RF ");lcd.print(rf);lcd.print(" ");lcd.setCursor(18,0);lcd.print("dB");
  lcd.setCursor(1,1);lcd.print("LR");lcd.setCursor(4,1);lcd.print(lr);lcd.print(" ");lcd.setCursor(7,1);lcd.print("dB ");lcd.setCursor(12,1);lcd.print("RR ");lcd.print(rr);lcd.print(" ");lcd.setCursor(18,1);lcd.print("dB");
  lcd.setCursor(1,2);lcd.print("Subwoofer");lcd.setCursor(12,2);lcd.print("Faza ");if(faza==0){lcd.print("  0");}else{lcd.print("180");}
  lcd.setCursor(1,3);lcd.print("G ");lcd.setCursor(4,3);lcd.print(sub);lcd.print(" ");lcd.setCursor(7,3);lcd.print("dB ");lcd.setCursor(12,3);lcd.print(sub_nam[sub_f]);
 } // menu0 = 2


 ////////////////////////// GAIN IN /////////////////////////////////////////////////////////////////////////////////////
if(in_x==1){ menu0=100;
   switch(in){
     case 0: gain0 = gain1;break;
     case 1: gain0 = gain2;break;
     case 2: gain0 = gain3;break;}
 
     if(ir.value==IR_3){gain0++;gr1=1;gr2=0;cl1();time=millis();times_in=millis();www=1;w=1;w3=1;gain_func();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){gain0++;gr2=0;cl1();time=millis();times_in=millis();www=1;w=1;w3=1;gain_func();}// кнопка >>>>>>
     if(ir.value==IR_4){gain0--;gr1=0;gr2=1;cl1();time=millis();times_in=millis();www=1;w=1;w3=1;gain_func();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){gain0--;gr1=0;cl1();time=millis();times_in=millis();www=1;w=1;w3=1;gain_func();}// кнопка <<<<<<  
 
    if (newPosition != oldPosition) {oldPosition = newPosition;
    gain0=gain0+newPosition;myEnc.write(0);newPosition=0;time=millis();times_in=millis();www=1;w=1;w3=1;gain_func();} 
 
   switch(in){
     case 0: gain1 = gain0;break;
     case 1: gain2 = gain0;break;
     case 2: gain3 = gain0;break;}
 
  au();
  lcd.setCursor(2,1);lcd.print("BXOD ");
  switch(in){
    case 0: lcd.print("MP3");break;
    case 1: lcd.print(" TV");break;
    case 2: lcd.print("AUX");break;
    }
  lcd.setCursor(11,1);lcd.print(" ");lcd.print(gain0);lcd.print(" ");lcd.setCursor(15,1);lcd.print("dB");gain_d=gain0+1;
   if(w3==1){
   for(z=0,z0=0,z1=0;z<=gain_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+7,2);lcd.write((uint8_t)0);lcd.setCursor(z0+1+7,2);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+7,2);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+7,2);lcd.write((uint8_t)2);}} w3=0;
   if(millis()-times_in>3000){in_x=0;cl();menu0=0;w2_arr();}}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   
 
  
  ///////////////////// EEPROM ///////////////////////////////////////////////////////////////         
  if(millis()-time>10000 && w==1){
     EEPROM.update(0,vol+79);EEPROM.update(1,treb+20);EEPROM.update(2,mid+20);EEPROM.update(3,bass+20);
     EEPROM.update(4,in);EEPROM.update(5,gain1);EEPROM.update(6,gain2);EEPROM.update(7,gain3);
     EEPROM.update(8,bass_f);EEPROM.update(9,bass_q);EEPROM.update(10,treb_f);EEPROM.update(11,treb_q),
     EEPROM.update(12,mid_f);EEPROM.update(13,mid_q);EEPROM.update(14,loud_f);EEPROM.update(15,loud_g);
     EEPROM.update(16,lf+79);EEPROM.update(17,rf+79);EEPROM.update(18,lr+79);EEPROM.update(19,rr+79);EEPROM.update(20,sub+79);EEPROM.update(21,sub_f);
     EEPROM.update(22,faza);
     menu=0;menu_1=0;menu_2=0;w=0;w2_arr();}
  
  }// loop

void faza_func(){if(faza>1){faza=1;}if(faza<0){faza=0;}}   
void sub_f_func(){if(sub_f>4){sub_f=4;}if(sub_f<0){sub_f=0;}}
void lf_func(){if(lf<-79){lf=-79;}if(lf>15){lf=15;}};
void rf_func(){if(rf<-79){rf=-79;}if(rf>15){rf=15;}};
void lr_func(){if(lr<-79){lr=-79;}if(lr>15){lr=15;}};
void rr_func(){if(rr<-79){rr=-79;}if(rr>15){rr=15;}};
void sub_func(){if(sub<-79){sub=-79;}if(sub>15){sub=15;}};
void au(){if(www==1){audio();www=0;}}
void loud_f_func(){if(loud_f>3){loud_f=3;}if(loud_f<0){loud_f=0;}}
void loud_g_func(){if(loud_g>20){loud_g=20;}if(loud_g<0){loud_g=0;}}
void mid_q_func(){if(mid_q>3){mid_q=3;}if(mid_q<0){mid_q=0;}}
void treb_q_func(){if(treb_q>1){treb_q=1;}if(treb_q<0){treb_q=0;}}
void bass_q_func(){if(bass_q>3){bass_q=3;}if(bass_q<0){bass_q=0;}}
void mid_f_func(){if(mid_f>3){mid_f=3;}if(mid_f<0){mid_f=0;}}
void treb_f_func(){if(treb_f>3){treb_f=3;}if(treb_f<0){treb_f=0;}}
void bass_f_func(){if(bass_f>3){bass_f=3;}if(bass_f<0){bass_f=0;}}
void gain_func(){if(gain0<0){gain0=0;}if(gain0>20){gain0=20;}}
void bass_func(){if(bass>20){bass=20;}if(bass<-20){bass=-20;}} 
void mid_func(){if(mid>20){mid=20;}if(mid<-20){mid=-20;}}
void treb_func(){if(treb>20){treb=20;}if(treb<-20){treb=-20;}}
void vol_func(){if(vol<-79){vol=-79;}if(vol>15){vol=15;}}
void w2_arr(){w2[0]=1;w2[1]=1;w2[2]=1;w2[3]=1;}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(200);}  


void audio(){
   bd.setSetup_1(1,2,0); // default (1,2,0)
   bd.setSetup_2(sub_f,1,0,faza); 
                   // int sub_f ------ OFF 55Hz 85Hz 120Hz 160Hz = int 0...4
                   // int sub_out ---- LPF Front Rear Prohibition = int 0...3
                   // int level_metr - HOLD REST = int 0..1
                   // int faza ------- 0 180 = int 0...1
   bd.setLoudness_f(loud_f); // 250Hz 400Hz 800Hz Prohibition = int 0...3
   bd.setIn(in); // 0...2
   bd.setIn_gain(gain0,mute); // in_gain -- 0...20 = 0...20 dB, mute -- 0 default 
   bd.setVol(vol); // -79...+15 dB = int -79...15
   bd.setFront_1(rf); // -79...+15 dB = int -79...15
   bd.setFront_2(lf); // -79...+15 dB = int -79...15
   bd.setRear_1(rr); // -79...+15 dB = int -79...15
   bd.setRear_2(lr); // -79...+15 dB = int -79...15
   bd.setSub(sub); // -79...+15 dB = int -79...15
   bd.mix();
   bd.setBass_setup(bass_q,bass_f); // 0.5 1.0 1.5 2.0 --- int 0...3, 60Hz 80Hz 100Hz 120Hz --- int 0...3
   bd.setMiddle_setup(mid_q,mid_f); // 0.75 1.0 1.25 1.5 --- int 0...3, 500Hz 1kHz 1.5kHz 2.5kHz --- int 0...3
   bd.setTreble_setup(treb_q,treb_f); // 0.75 1.25  --- int 0...1, 7.5kHz 10kHz 12.5kHz 15kHz --- int 0...3
   bd.setBass_gain(bass); // --20 ... +20 dB = int -20 ... 20  
   bd.setMiddle_gain(mid); // --20 ... +20 dB = int -20 ... 20
   bd.setTreble_gain(treb); // --20 ... +20 dB = int -20 ... 20   
   bd.setLoudness_gain(loud_g); // 0 ... 20 dB = int 0 ... 20
  }  

void to_Timer(){newPosition = myEnc.read()/4;}   

92

Re: BD37534FV+LCD2004+энкодер+ИК пульт

У меня все работает, я изменил скетч под свое подключение кнопок (без резисторов, нажатие > замыкание на gnd)

#define IR_1 0xFF629D // Кнопка вверх
#define IR_2 0xFFA857 // Кнопка вниз 
#define IR_3 0xFFC23D // Кнопка >
#define IR_4 0xFF22DD // Кнопка <
#define IR_5 0xFFE01F // Кнопка IN 
#define IR_6 0xFF02FD // Кнопка MENU2 
#define IR_7 0xFFE21D // Кнопка MUTE 
#define IR_8 0xFFA25D // Кнопка STANDBY (POWER)
/*
#define IR_1 0x33B8A05F // Кнопка вверх
#define IR_2 0x33B8609F // Кнопка вниз 
#define IR_3 0x33B810EF // Кнопка >
#define IR_4 0x33B8E01F // Кнопка <
#define IR_5 0x33B844BB // Кнопка IN 
#define IR_6 0x33B8946B // Кнопка MENU2  
#define IR_7 0x33B850AF // Кнопка MUTE 
#define IR_8 0x33B800FF // Кнопка STANDBY (POWER)
*/


#include <Wire.h> 
#include <LiquidCrystal_I2C.h>  // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
#include <BD37534FV.h>          // https://github.com/liman324/BD37534FV/archive/master.zip
#include <Encoder.h>            // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <EEPROM.h>
#include <MsTimer2.h>           // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <boarddefs.h>
#include <IRremote.h>           // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip
   BD37534FV bd; 
   LiquidCrystal_I2C lcd(0x27,20,4);  // Устанавливаем дисплей
   IRrecv irrecv(12); // указываем вывод модуля IR приемника
   Encoder myEnc(9, 8);// DT, CLK
   decode_results ir; 
   byte a1[8] = {0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
   byte a2[8] = {0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
   byte a3[8] = {0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000}; 
   byte a4[8] = {0b10000,0b11000,0b11100,0b11110,0b11100,0b11000,0b10000,0b00000}; 
   unsigned long time,times_in,oldPosition  = -999,newPosition; 
   byte in,in_x,w,w1,w2[4],w3,z,z0,z1,q,i,n,www,gr1,gr2,mute,power;
   int menu,menu0,menu_1,menu_2,vol,bass,treb,mid,vol_d,bass_d,treb_d,mid_d;
   int temp0,gain0,gain1,gain2,gain3,gain_d;
   int bass_f,bass_q,treb_f,treb_q,mid_f,mid_q,loud_f,loud_g;
   int lf,rf,lr,rr,sub,sub_f,faza,par;
   byte mesto[8]={4,13,4,13,4,13,4,13};
   byte mesto1[8]={0,0,1,1,2,2,3,3};
   byte mesto2[7]={0,11,0,11,11,0,11};
   byte mesto3[7]={0,0,1,1,2,3,3};
   String bass_nam[4]={"60   Hz", "80   Hz", "100  Hz", "120  Hz"};
   String treb_nam[4]={"7.5 kHz", "10  kHz", "12.5kHz", "15  kHz"};
   String mid_nam[4] ={"500  Hz", "1   kHz", "1.5 kHz", "2.5 kHz"};
   String lon_nam[4] ={"250  Hz", "400  Hz", "800  Hz", "disable"};
   String sub_nam[5] ={" OFF   ", " 55  Hz", " 85  Hz", " 120 Hz", " 160 Hz"};
   float bass_nam_1[4]={0.50, 1.00, 1.50, 2.00};
   float mid_nam_1[4]={0.75, 1.00, 1.25, 1.50};
   float treb_nam_1[2]={0.75, 1.25};

void setup() {Serial.begin(9600);
  irrecv.enableIRIn();lcd.init();lcd.backlight();
  lcd.setCursor(0,1);lcd.print("    PRIVET RAIL");lcd.setCursor(0,2);lcd.print("        ***"); delay(2000);
  lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);lcd.createChar(3,a4);
  pinMode(10,INPUT);  // МЕНЮ КНОПКА SW энкодера
  pinMode(2,INPUT_PULLUP);   // МЕНЮ НАСТРОЕК
  pinMode(3,INPUT_PULLUP);   // IN
  pinMode(4,INPUT_PULLUP);// КНОПКА MUTE
  pinMode(5,INPUT_PULLUP);// КНОПКА STANDBY
  pinMode(7,OUTPUT);//  STANDBY
  pinMode(6,OUTPUT);  // ВЫХОД УПРАВЛЕНИЯ ПОДСВЕТКОЙ
  analogWrite(6, 200);// больше 200 не делать
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  if(EEPROM.read(100)!=0){for(int i=0;i<100;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
  vol = EEPROM.read(0)-79;treb = EEPROM.read(1)-20;mid = EEPROM.read(2)-20;bass = EEPROM.read(3)-20;
  in = EEPROM.read(4);gain1 = EEPROM.read(5);gain2 = EEPROM.read(6);gain3 = EEPROM.read(7);
  bass_f = EEPROM.read(8);bass_q = EEPROM.read(9);treb_f = EEPROM.read(10);treb_q = EEPROM.read(11);
  mid_f = EEPROM.read(12);mid_q = EEPROM.read(13);loud_f = EEPROM.read(14);loud_g= EEPROM.read(15);
  lf = EEPROM.read(16)-79;rf = EEPROM.read(17)-79;lr = EEPROM.read(18)-79;rr = EEPROM.read(19)-79;sub = EEPROM.read(20)-79;sub_f = EEPROM.read(21);
  faza = EEPROM.read(22);
  w2_arr();audio();cl();
}

void loop(){
  if(mute==0){
  if(digitalRead(10)==LOW&&menu0==0){menu++;delay(200);time=millis();w=1;w2_arr();if(menu>3){menu=0;}}// меню 0
  if(digitalRead(10)==LOW&&menu0==1){menu_1++;delay(200);time=millis();w=1;if(menu_1>7){menu_1=0;}}// меню 1
  if(digitalRead(10)==LOW&&menu0==2){menu_2++;delay(200);time=millis();w=1;if(menu_2>6){menu_2=0;}}// меню 2
 
  if(digitalRead(2)==LOW){menu0++;time=millis();w=1;w2_arr();menu=0;menu_1=0;menu_2=0;if(menu0>2){menu0=0;}cl();delay(200);}// меню
  if(digitalRead(3)==LOW){in++;cl();times_in=millis();in_x=1;w3=1;www=1;menu0=100;if(in>2){in=0;}}// IN
  }
  if(digitalRead(4)==LOW&&mute==0&&power==0){mute=1;cl();w=1;w2_arr();lcd.setCursor(8,1);lcd.print("MUTE");menu0=100;audio();}// mute on
  if(digitalRead(4)==LOW&&mute==1&&power==0){mute=0;cl();time=millis();w=1;w2_arr();menu0=0;myEnc.write(0);audio();}// mute off

  if(digitalRead(5)==LOW&&power==0){power=1;mute=1;audio();lcd.clear();lcd.setCursor(5,1);lcd.print("POWER  OFF");menu0=100;delay(3000);lcd.noBacklight();}// power off
  if(digitalRead(5)==LOW&&power==1){power=0;mute=0;audio();lcd.backlight();lcd.clear();lcd.setCursor(5,1);lcd.print("POWER   ON ");w=1;w2_arr();menu0=0;myEnc.write(0);audio();delay(3000);lcd.clear();}// power on
  if(power==0){digitalWrite(7,HIGH);}if(power==1){digitalWrite(7,LOW);} // выход STANDBY

  ////////////////////// IR /////////////////////////////////////////////////
  if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
  if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта
   if(mute==0){
   if(ir.value==IR_2&&menu0==0){menu++;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu>3){menu=0;}}//  кнопка вверх 
   if(ir.value==IR_1&&menu0==0){menu--;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu<0){menu=3;}}//  кнопка вниз
   if(ir.value==IR_2&&menu0==1){menu_1++;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu_1>7){menu_1=0;}}//  кнопка вверх 
   if(ir.value==IR_1&&menu0==1){menu_1--;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu_1<0){menu_1=7;}}//  кнопка вниз
   if(ir.value==IR_2&&menu0==2){menu_2++;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu_2>6){menu_2=0;}}//  кнопка вверх 
   if(ir.value==IR_1&&menu0==2){menu_2--;gr1=0;gr2=0;cl1();time=millis();w=1;if(menu_2<0){menu_2=6;}}//  кнопка вниз
 
   if(ir.value==IR_6){menu0++;in_x=0;gr1=0;gr2=0;cl();time=millis();w=1;w2_arr();menu=0;menu_1;menu_2;if(menu0>2){menu0=0;}}//  кнопка MENU
   if(ir.value==IR_5){in++;gr1=0;gr2=0;cl();times_in=millis();in_x=1;w3=1;www=1;menu0=100;if(in>2){in=0;}}//  кнопка IN
   }
   if(ir.value==IR_7&&mute==0&&power==0){mute=1;cl();w=1;w2_arr();lcd.setCursor(8,1);lcd.print("MUTE");menu0=100;audio();}// mute on
   if(ir.value==IR_7&&mute==1&&power==0){mute=0;cl();time=millis();w=1;w2_arr();menu0=0;myEnc.write(0);audio();}// mute off

   if(ir.value==IR_8&&power==0){power=1;mute=1;audio();cl();lcd.setCursor(5,1);lcd.print("POWER  OFF");menu0=100;delay(3000);lcd.noBacklight();}// power off
   if(ir.value==IR_8&&power==1){power=0;mute=0;audio();lcd.backlight();cl();lcd.setCursor(5,1);lcd.print("POWER   ON ");w=1;w2_arr();menu0=0;myEnc.write(0);audio();delay(3000);lcd.clear();}// power on
   
   /////////////////////////////// MENU0 = VOLUME TERBLE MIDDLE BASS ///////////////////////////////////////////////////////////////////////
  if(menu0==0){
    switch(menu){
      case 0: temp0 = vol;q=0;break;
      case 1: temp0 = treb;q=1;break;
      case 2: temp0 = mid;q=2;break;
      case 3: temp0 = bass;q=3;break;
      }
 
     if(ir.value==IR_3){temp0++;gr1=1;gr2=0;cl1();time=millis();w=1;w2[q]=1;www=1;}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){temp0++;gr2=0;cl1();time=millis();;w=1;w2[q]=1;www=1;}// кнопка >>>>>>
     if(ir.value==IR_4){temp0--;gr1=0;gr2=1;cl1();time=millis();;w=1;w2[q]=1;www=1;}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){temp0--;gr1=0;cl1();time=millis();w=1;w2[q]=1;www=1;}// кнопка <<<<<<   
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2[q]=1;www=1;} 
 
     switch(menu){
      case 0: vol = temp0;vol_func();break;
      case 1: treb = temp0;treb_func();break;
      case 2: mid = temp0;mid_func();break;
      case 3: bass = temp0;bass_func();break;
      }
 
   au();
   for(i=0;i<4;i++){if(menu==i){lcd.setCursor(0,i);lcd.write((uint8_t)3);}else{lcd.setCursor(0,i);lcd.print(" ");}}
   lcd.setCursor(1,0);lcd.print("VOLUME ");if(map(vol,-79,15,0,100)<10){lcd.print(" ");}if(map(vol,-79,15,0,100)<100){lcd.print(" ");}
     lcd.print(map(vol,-79,15,0,100));lcd.print(" ");vol_d=map(vol,-79,15,0,21);
   lcd.setCursor(1,1);lcd.print("TREBLE ");if(treb>-10){lcd.print(" ");}if(treb<10&&treb>=0){lcd.print(" ");}
     lcd.print(treb);lcd.print(" ");treb_d=map(treb,-20,20,0,21);
   lcd.setCursor(1,2);lcd.print("MIDDLE ");if(mid>-10){lcd.print(" ");}if(mid<10&&mid>=0){lcd.print(" ");}
     lcd.print(mid);lcd.print(" ");mid_d=map(mid,-20,20,0,21);
   lcd.setCursor(1,3);lcd.print("BASS   ");if(bass>-10){lcd.print(" ");}if(bass<10&&bass>=0){lcd.print(" ");}
     lcd.print(bass);lcd.print(" ");bass_d=map(bass,-20,20,0,21);
   
   for(n=0;n<4;n++){if(w2[n]==1){
   switch(n){
    case 0: par = vol_d;break;
    case 1: par = treb_d;break;
    case 2: par = mid_d;break;
    case 3: par = bass_d;break;
    } 
   for(z=0,z0=0,z1=0;z<=par;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+12,n);lcd.write((uint8_t)0);lcd.setCursor(z0+1+12,n);lcd.print("  ");}}
   if(z1==3){lcd.setCursor(z0+12,n);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+12,n);lcd.write((uint8_t)2);}w2[n]=0;}
   }}// menu0 = 0
///////////////////////////////////////////////////////////////////////////////////////////////
  
 ///////////////////// MENU 2 ////////////////////////////////////////////////////////
 if(menu0==1){
  switch(menu_1){
      case 0: temp0 = bass_f;break;
      case 1: temp0 = bass_q;break;
      case 2: temp0 = mid_f;break;
      case 3: temp0 = mid_q;break;
      case 4: temp0 = treb_f;break;
      case 5: temp0 = treb_q;break;
      case 6: temp0 = loud_f;break;
      case 7: temp0 = loud_g;break;}
 
     if(ir.value==IR_3){temp0++;gr1=1;gr2=0;cl1();time=millis();w=1;www=1;}// кнопка > 
   //  if(ir.value==0xFFFFFFFF and gr1==1){temp0++;gr2=0;cl1();time=millis();w=1;www=1;}// кнопка >>>>>>
     if(ir.value==IR_4){temp0--;gr1=0;gr2=1;cl1();time=millis();;w=1;www=1;}// кнопка <
   //  if(ir.value==0xFFFFFFFF and gr2==1){temp0--;gr1=0;cl1();time=millis();w=1;www=1;}// кнопка <<<<<<     
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;www=1;} 
 
     switch(menu_1){
      case 0: bass_f = temp0;bass_f_func();break;
      case 1: bass_q = temp0;bass_q_func();break;
      case 2: mid_f = temp0;mid_f_func();break;
      case 3: mid_q = temp0;mid_q_func();break;
      case 4: treb_f = temp0;treb_f_func();break;
      case 5: treb_q = temp0;treb_q_func();break;
      case 6: loud_f = temp0;loud_f_func();break;
      case 7: loud_g = temp0;loud_g_func();break;}
 
  au();
  for(i=0;i<8;i++){if(menu_1==i){lcd.setCursor(mesto[i],mesto1[i]);lcd.write((uint8_t)3);}else{lcd.setCursor(mesto[i],mesto1[i]);lcd.print(" ");}}
  lcd.setCursor(0,0);lcd.print("BASS");lcd.setCursor(5,0);lcd.print(bass_nam[bass_f]);lcd.setCursor(14,0);lcd.print("Q ");lcd.print(bass_nam_1[bass_q]);
  lcd.setCursor(0,1);lcd.print("MIDD");lcd.setCursor(5,1);lcd.print(mid_nam[mid_f]);lcd.setCursor(14,1);lcd.print("Q ");lcd.print(mid_nam_1[mid_q]);
  lcd.setCursor(0,2);lcd.print("TREB");lcd.setCursor(5,2);lcd.print(treb_nam[treb_f]);lcd.setCursor(14,2);lcd.print("Q ");lcd.print(treb_nam_1[treb_q]);
  lcd.setCursor(0,3);lcd.print("LOUD");lcd.setCursor(5,3);lcd.print(lon_nam[loud_f]);lcd.setCursor(14,3);lcd.print("G ");lcd.print(loud_g/10);lcd.print(loud_g%10);lcd.setCursor(18,3);lcd.print("dB");
  }// menu0 = 1
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  if(menu0==2){
     switch(menu_2){
      case 0: temp0 = lf;break;
      case 1: temp0 = rf;break;
      case 2: temp0 = lr;break;
      case 3: temp0 = rr;break;
      case 4: temp0 = faza;break;
      case 5: temp0 = sub;break;
      case 6: temp0 = sub_f;break;}
 
     if(ir.value==IR_3){temp0++;gr1=1;gr2=0;cl1();time=millis();w=1;www=1;}// кнопка > 
     if(ir.value==0xFFFFFFFF && gr1==1){temp0++;gr2=0;cl1();time=millis();w=1;www=1;}// кнопка >>>>>>
     if(ir.value==IR_4){temp0--;gr1=0;gr2=1;cl1();time=millis();;w=1;www=1;}// кнопка <
     if(ir.value==0xFFFFFFFF && gr2==1){temp0--;gr1=0;cl1();time=millis();w=1;www=1;}// кнопка <<<<<<     
 
   if (newPosition != oldPosition){oldPosition = newPosition;
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;www=1;} 
 
     switch(menu_2){
      case 0: lf = temp0;lf_func();break;
      case 1: rf = temp0;rf_func();break;
      case 2: lr = temp0;lr_func();break;
      case 3: rr = temp0;rr_func();break;
      case 4: faza = temp0;faza_func();break;
      case 5: sub = temp0;sub_func();break;
      case 6: sub_f = temp0;sub_f_func();break;}
 
  au();
  for(i=0;i<7;i++){if(menu_2==i){lcd.setCursor(mesto2[i],mesto3[i]);lcd.write((uint8_t)3);}else{lcd.setCursor(mesto2[i],mesto3[i]);lcd.print(" ");}}
  lcd.setCursor(1,0);lcd.print("LF");lcd.setCursor(4,0);lcd.print(lf);lcd.print(" ");lcd.setCursor(7,0);lcd.print("dB ");lcd.setCursor(12,0);lcd.print("RF ");lcd.print(rf);lcd.print(" ");lcd.setCursor(18,0);lcd.print("dB");
  lcd.setCursor(1,1);lcd.print("LR");lcd.setCursor(4,1);lcd.print(lr);lcd.print(" ");lcd.setCursor(7,1);lcd.print("dB ");lcd.setCursor(12,1);lcd.print("RR ");lcd.print(rr);lcd.print(" ");lcd.setCursor(18,1);lcd.print("dB");
  lcd.setCursor(1,2);lcd.print("Subwoofer");lcd.setCursor(12,2);lcd.print("Faza ");if(faza==0){lcd.print("  0");}else{lcd.print("180");}
  lcd.setCursor(1,3);lcd.print("G ");lcd.setCursor(4,3);lcd.print(sub);lcd.print(" ");lcd.setCursor(7,3);lcd.print("dB ");lcd.setCursor(12,3);lcd.print(sub_nam[sub_f]);
 } // menu0 = 2


 ////////////////////////// GAIN IN /////////////////////////////////////////////////////////////////////////////////////
if(in_x==1){ menu0=100;
   switch(in){
     case 0: gain0 = gain1;break;
     case 1: gain0 = gain2;break;
     case 2: gain0 = gain3;break;}
 
     if(ir.value==IR_3){gain0++;gr1=1;gr2=0;cl1();time=millis();times_in=millis();www=1;w=1;w3=1;gain_func();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){gain0++;gr2=0;cl1();time=millis();times_in=millis();www=1;w=1;w3=1;gain_func();}// кнопка >>>>>>
     if(ir.value==IR_4){gain0--;gr1=0;gr2=1;cl1();time=millis();times_in=millis();www=1;w=1;w3=1;gain_func();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){gain0--;gr1=0;cl1();time=millis();times_in=millis();www=1;w=1;w3=1;gain_func();}// кнопка <<<<<<  
 
    if (newPosition != oldPosition) {oldPosition = newPosition;
    gain0=gain0+newPosition;myEnc.write(0);newPosition=0;time=millis();times_in=millis();www=1;w=1;w3=1;gain_func();} 
 
   switch(in){
     case 0: gain1 = gain0;break;
     case 1: gain2 = gain0;break;
     case 2: gain3 = gain0;break;}
 
  au();
  lcd.setCursor(2,1);lcd.print("BXOD ");
  switch(in){
    case 0: lcd.print("MP3");break;
    case 1: lcd.print(" TV");break;
    case 2: lcd.print("AUX");break;
    }
  lcd.setCursor(11,1);lcd.print(" ");lcd.print(gain0);lcd.print(" ");lcd.setCursor(15,1);lcd.print("dB");gain_d=gain0+1;
   if(w3==1){
   for(z=0,z0=0,z1=0;z<=gain_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+7,2);lcd.write((uint8_t)0);lcd.setCursor(z0+1+7,2);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+7,2);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+7,2);lcd.write((uint8_t)2);}} w3=0;
   if(millis()-times_in>3000){in_x=0;cl();menu0=0;w2_arr();}}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   
 
  
  ///////////////////// EEPROM ///////////////////////////////////////////////////////////////         
  if(millis()-time>10000 && w==1){
     EEPROM.update(0,vol+79);EEPROM.update(1,treb+20);EEPROM.update(2,mid+20);EEPROM.update(3,bass+20);
     EEPROM.update(4,in);EEPROM.update(5,gain1);EEPROM.update(6,gain2);EEPROM.update(7,gain3);
     EEPROM.update(8,bass_f);EEPROM.update(9,bass_q);EEPROM.update(10,treb_f);EEPROM.update(11,treb_q),
     EEPROM.update(12,mid_f);EEPROM.update(13,mid_q);EEPROM.update(14,loud_f);EEPROM.update(15,loud_g);
     EEPROM.update(16,lf+79);EEPROM.update(17,rf+79);EEPROM.update(18,lr+79);EEPROM.update(19,rr+79);EEPROM.update(20,sub+79);EEPROM.update(21,sub_f);
     EEPROM.update(22,faza);
     menu=0;menu_1=0;menu_2=0;w=0;w2_arr();}
  
  }// loop

void faza_func(){if(faza>1){faza=1;}if(faza<0){faza=0;}}   
void sub_f_func(){if(sub_f>4){sub_f=4;}if(sub_f<0){sub_f=0;}}
void lf_func(){if(lf<-79){lf=-79;}if(lf>15){lf=15;}};
void rf_func(){if(rf<-79){rf=-79;}if(rf>15){rf=15;}};
void lr_func(){if(lr<-79){lr=-79;}if(lr>15){lr=15;}};
void rr_func(){if(rr<-79){rr=-79;}if(rr>15){rr=15;}};
void sub_func(){if(sub<-79){sub=-79;}if(sub>15){sub=15;}};
void au(){if(www==1){audio();www=0;}}
void loud_f_func(){if(loud_f>3){loud_f=3;}if(loud_f<0){loud_f=0;}}
void loud_g_func(){if(loud_g>20){loud_g=20;}if(loud_g<0){loud_g=0;}}
void mid_q_func(){if(mid_q>3){mid_q=3;}if(mid_q<0){mid_q=0;}}
void treb_q_func(){if(treb_q>1){treb_q=1;}if(treb_q<0){treb_q=0;}}
void bass_q_func(){if(bass_q>3){bass_q=3;}if(bass_q<0){bass_q=0;}}
void mid_f_func(){if(mid_f>3){mid_f=3;}if(mid_f<0){mid_f=0;}}
void treb_f_func(){if(treb_f>3){treb_f=3;}if(treb_f<0){treb_f=0;}}
void bass_f_func(){if(bass_f>3){bass_f=3;}if(bass_f<0){bass_f=0;}}
void gain_func(){if(gain0<0){gain0=0;}if(gain0>20){gain0=20;}}
void bass_func(){if(bass>20){bass=20;}if(bass<-20){bass=-20;}} 
void mid_func(){if(mid>20){mid=20;}if(mid<-20){mid=-20;}}
void treb_func(){if(treb>20){treb=20;}if(treb<-20){treb=-20;}}
void vol_func(){if(vol<-79){vol=-79;}if(vol>15){vol=15;}}
void w2_arr(){w2[0]=1;w2[1]=1;w2[2]=1;w2[3]=1;}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(200);}  


void audio(){
   bd.setSetup_1(1,2,0); // default (1,2,0)
   bd.setSetup_2(sub_f,1,0,faza); 
                   // int sub_f ------ OFF 55Hz 85Hz 120Hz 160Hz = int 0...4
                   // int sub_out ---- LPF Front Rear Prohibition = int 0...3
                   // int level_metr - HOLD REST = int 0..1
                   // int faza ------- 0 180 = int 0...1
   bd.setLoudness_f(loud_f); // 250Hz 400Hz 800Hz Prohibition = int 0...3
   bd.setIn(in); // 0...2
   bd.setIn_gain(gain0,mute); // in_gain -- 0...20 = 0...20 dB, mute -- 0 default 
   bd.setVol(vol); // -79...+15 dB = int -79...15
   bd.setFront_1(rf); // -79...+15 dB = int -79...15
   bd.setFront_2(lf); // -79...+15 dB = int -79...15
   bd.setRear_1(rr); // -79...+15 dB = int -79...15
   bd.setRear_2(lr); // -79...+15 dB = int -79...15
   bd.setSub(sub); // -79...+15 dB = int -79...15
   bd.mix();
   bd.setBass_setup(bass_q,bass_f); // 0.5 1.0 1.5 2.0 --- int 0...3, 60Hz 80Hz 100Hz 120Hz --- int 0...3
   bd.setMiddle_setup(mid_q,mid_f); // 0.75 1.0 1.25 1.5 --- int 0...3, 500Hz 1kHz 1.5kHz 2.5kHz --- int 0...3
   bd.setTreble_setup(treb_q,treb_f); // 0.75 1.25  --- int 0...1, 7.5kHz 10kHz 12.5kHz 15kHz --- int 0...3
   bd.setBass_gain(bass); // --20 ... +20 dB = int -20 ... 20  
   bd.setMiddle_gain(mid); // --20 ... +20 dB = int -20 ... 20
   bd.setTreble_gain(treb); // --20 ... +20 dB = int -20 ... 20   
   bd.setLoudness_gain(loud_g); // 0 ... 20 dB = int 0 ... 20
  }  

void to_Timer(){newPosition = myEnc.read()/4;}  

93 (2022-10-10 14:13:46 отредактировано Allkor)

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Большое спасибо.
Кнопки на прямую пустить, не проблема. Обязательно попробую.
Меня больше интересует вопрос, почему после откл/включения питания, "слетает" прошивка....
Такое ощущение что после выключения питния сбрасывается память.
Как нибудь можно почистить или обнулить Ардуинку?
Я встречался с таким на ЭБУ, когда слетает прошивка в епром, но здесь ее нет. Скорее всего под это дело выделена какая то часть внутренней памяти Ардуино... но для меня это темный лес.
Может вы сталкивались с этим?

94 (2022-11-19 17:39:39 отредактировано Allkor)

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Добрый день. Проблема осталась. Но седни заметил одну закономерность.
Скетч проверяется и загружается без ошибок. Отключаю USB и подаю питание, дисплей пустой. Подключаю USB и тут же появляется приветствие и меню. Крутилки и кнопки работают, Отключаешь/подключаешь питание и все повторяется по кругу. Без компа Ардуина не заводиться.
Чем это может быть вызвано?

95

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Какое питание Вы подаете? На какой пин Arduino?

96 (2022-11-21 19:54:37 отредактировано Allkor)

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Добрый день.
Спасибо за подсказку. С питанием разобрался...Выпаял перемычку, а поставить обратно забыл.)))
Ардуинка заводиться. I2C сканер видит это.
http://forum.rcl-radio.ru/uploads/images/2022/11/22bf46e6ce11d6dd75bab9ec7ab0cd03.jpg
Висят BD37534FV+LCD2004. Правильно?
Усилитель пока не соединял, осталась одна проблема.
Экодер работает нормально. Кнопка 'SW энкодера на D10 ноге.
Кнопки Power и IN работают.
Кнопка MUTE D5 почему то не работает.
При нажатии кнопки MENU2 D4 появляется надпись MUTE, при повторном нажатии пропадает. При этом, на дисплее светится Меню1, которое меняется на  MUTE.
Проверил монтаж, все нормально.
+5 присутствует на всех кнопках. Сопротивления 10к по минусу на всех кнопках присутствуют и звонятся. Пробовал менять и перемыкать кнопки в ручную, не помогло.
Пробовал разные скетчи с этой темы, не помогло.
Не пробовал управлять с пульта...пульт куда то утерялся.
Что интересно, до установки проца, эта плата и монтаж работала нормально...я в растеренности...что еще может быть?

97

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Какой скетч используете? Лучше с кнопок резисторы убрать, нажатие кнопки = замыкание на gnd.

98

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Хорошо. Завтра так и попробую сделать.

99

Re: BD37534FV+LCD2004+энкодер+ИК пульт

Убрал сопротивления и залил ваш скетч с 92 поста.
Сначало загорается POWER ON, потом MЕNU1, потом POWER OF, и так по кругу.

100

Re: BD37534FV+LCD2004+энкодер+ИК пульт

У меня скетч с поста 92 работает нормально, проверьте подключение кнопок.
Как Вы подключаете кнопки?