1

Тема: BD37534FV - Sound Processor with Built-in 3-band Equalizer

В стадии разработки

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


Key Specifications
 Power Supply Voltage Range: 7.0V to 9.5V
 Circuit Current (No Signal): 38mA(Typ)
 Total Harmonic Distortion 1:
(FRONT,REAR) 0.001%(Typ)
 Total Harmonic Distortion 2:
(SUBWOOFER) 0.002%(Typ)
 Maximum Input Voltage: 2.3Vrms (Typ)
 Cross-talk Between Selectors: -100dB (Typ)
 Volume Control Range: +15dB to -79dB
 Output Noise Voltage 1:
(FRONT,REAR) 3.8µVrms(Typ)
 Output Noise Voltage 2:
(SUBWOOFER) 4.8µVrms(Typ)
 Residual Output Noise Voltage: 1.8µVrms (Typ)
 Operating Temperature Range: -40°C to +85°C

test.ino

#include <Wire.h> 
#include <BD37534FV.h>
BD37534FV tda; 

void setup(){
   Wire.begin();
   audio();
}

void loop(){}

void audio(){
   tda.setSetup_1(1,2,0); // default (1,2,0)
   tda.setSetup_2(0,0,0,0); 
                   // 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
   tda.setLoudness_f(0); // 250Hz 400Hz 800Hz Prohibition = int 0...3
   tda.setIn(0); // 0...2
   tda.setIn_gain(0,0); // in_gain -- 0...20 = 0...20 dB, mute -- 0 default 
   tda.setVol(0); // -79...+15 dB = int -79...15
   tda.setFront_1(0); // -79...+15 dB = int -79...15
   tda.setFront_2(0); // -79...+15 dB = int -79...15
   tda.setRear_1(0); // -79...+15 dB = int -79...15
   tda.setRear_2(0); // -79...+15 dB = int -79...15
   tda.setSub(0); // -79...+15 dB = int -79...15
   tda.mix();
   tda.setBass_setup(0,0); // 0.5 1.0 1.5 2.0 --- int 0...3, 60Hz 80Hz 100Hz 120Hz --- int 0...3
   tda.setMiddle_setup(0,0); // 0.75 1.0 1.25 1.5 --- int 0...3, 500Hz 1kHz 1.5kHz 2.5kHz --- int 0...3
   tda.setTreble_setup(0,0); // 0.75 1.25  --- int 0...1, 7.5kHz 10kHz 12.5kHz 15kHz --- int 0...3
   tda.setBass_gain(0); // --20 ... +20 dB = int -20 ... 20  
   tda.setMiddle_gain(0); // --20 ... +20 dB = int -20 ... 20
   tda.setTreble_gain(0); // --20 ... +20 dB = int -20 ... 20   
   tda.setLoudness_gain(0); // 0 ... 20 dB = int 0 ... 20
  }

Скетч использует 2310 байт (7%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 219 байт (10%) динамической памяти, оставляя 1829 байт для локальных переменных. Максимум: 2048 байт.

BD37534FV.h

#ifndef BD37534FV_H
#define BD37534FV_H

#define BD37534FV_address 0b1000000 

#define SETUP_1        0x01
#define SETUP_2        0x02
#define SETUP_3        0x03
#define INPUT_SELECT   0x05
#define INPUT_GAIN     0x06
#define VOLUME_GAIN    0x20
#define FADER_1_FRONT  0x28
#define FADER_2_FRONT  0x29
#define FADER_1_REAR   0x2A
#define FADER_2_REAR   0x2B
#define FADER_SUB      0x2C
#define MIXING         0x30
#define BASS_SETUP     0x41
#define MIDDLE_SETUP   0x44
#define TREBLE_SETUP   0x47
#define BASS_GAIN      0x51
#define MIDDLE_GAIN    0x54
#define TREBLE_GAIN    0x57
#define LOUDNESS_GAIN  0x75

#include <Arduino.h>
class BD37534FV
{
  public:
    BD37534FV();
    void setSetup_1(int sw_of, int sw_time, int time_mute); // default (1,2,0)
        void setSetup_2(int sub_f, int sub_out, int level_metr, int 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
        void setLoudness_f(int loud_f); // 250Hz 400Hz 800Hz Prohibition = int 0...3
        void setIn(int in); // 0...2
        void setIn_gain(int in_gain, int mute); // in_gain -- 0...20 = 0...20 dB, mute -- 0 default 
        void setVol(int vol); // -79...+15 dB = int -79...15
        void setFront_1(int front_1); // -79...+15 dB = int -79...15
        void setFront_2(int front_2); // -79...+15 dB = int -79...15
        void setRear_1(int rear_1); // -79...+15 dB = int -79...15
        void setRear_2(int rear_2); // -79...+15 dB = int -79...15
        void setSub(int sub); // -79...+15 dB = int -79...15
        void mix();
        void setBass_setup(int bass_q, int bass_f); // 0.5 1.0 1.5 2.0 --- int 0...3, 60Hz 80Hz 100Hz 120Hz --- int 0...3
        void setMiddle_setup(int mid_q, int mid_f); // 0.75 1.0 1.25 1.5 --- int 0...3, 500Hz 1kHz 1.5kHz 2.5kHz --- int 0...3
        void setTreble_setup(int treb_q, int treb_f); // 0.75 1.25  --- int 0...1, 7.5kHz 10kHz 12.5kHz 15kHz --- int 0...3
        void setBass_gain(int bass_gain); // --20 ... +20 dB = int -20 ... 20    
        void setMiddle_gain(int mid_gain); // --20 ... +20 dB = int -20 ... 20
        void setTreble_gain(int treb_gain); // --20 ... +20 dB = int -20 ... 20        
        void setLoudness_gain(int loud_gain); // 0 ... 20 dB = int 0 ... 20

  private:
    void writeWire(char a, char b);
};
    
#endif //BD37534FV_H

BD37534FV.cpp

#include <Arduino.h>
#include <Wire.h>
#include "BD37534FV.h"

BD37534FV::BD37534FV(){
    Wire.begin();
}

void BD37534FV::setSetup_1(int sw_of, int sw_time, int time_mute){
           switch(sw_of){
               case 0: sw_of = 0b00000000;break;
               case 1: sw_of = 0b10000000;break;
   }
           switch(sw_time){
               case 0: sw_time = 0b00000000;break;
               case 1: sw_time = 0b00010000;break;
               case 2: sw_time = 0b00100000;break;
               case 3: sw_time = 0b00110000;break;        
   }
           switch(time_mute){
               case 0: time_mute = 0b00000000;break;
               case 1: time_mute = 0b00000001;break;
               case 2: time_mute = 0b00000010;break;
               case 3: time_mute = 0b00000011;break;        
   }
           int set1_sum = 0b00000100 + sw_of + sw_time + time_mute;
           writeWire(SETUP_1, set1_sum); 
   }

void BD37534FV::setSetup_2(int sub_f, int sub_out, int level_metr, int faza){
            switch(sub_f){
               case 0: sub_f = 0b00000000;break;
               case 1: sub_f = 0b00000001;break;
               case 2: sub_f = 0b00000010;break;
               case 3: sub_f = 0b00000011;break;  
               case 4: sub_f = 0b00000100;break; 
   }
            switch(sub_out){
               case 0: sub_out = 0b00000000;break;
               case 1: sub_out = 0b00010000;break;
               case 2: sub_out = 0b00100000;break;
               case 3: sub_out = 0b00110000;break;  
   }
            switch(level_metr){
               case 0: level_metr = 0b00000000;break;
               case 1: level_metr = 0b01000000;break;
   }
            switch(faza){
               case 0: faza = 0b00000000;break;
               case 1: faza = 0b10000000;break;
   }
            int set2_sum =  sub_f + sub_out + level_metr + faza;
            writeWire(SETUP_2, set2_sum); 
   }
   
void BD37534FV::setLoudness_f(int loud_f){
            switch(loud_f){
               case 0: loud_f = 0b00000001;break;
               case 1: loud_f = 0b00001001;break;
               case 2: loud_f = 0b00010001;break;
               case 3: loud_f = 0b00011001;break;  
   }
            writeWire(SETUP_3, loud_f); 
   }

void BD37534FV::setIn(int in){
            writeWire(INPUT_SELECT, in); 
   }


void BD37534FV::setIn_gain(int in_gain, int mute){
            switch(mute){
               case 0: mute = 0b00000000;break;
               case 1: mute = 0b10000000;break;
   }
            int sum_in_gain = in_gain + mute;
            writeWire(INPUT_GAIN, sum_in_gain); 
   }

void BD37534FV::setVol(int vol){
            if(vol > 0){vol = 128 - vol;}
            if(vol <= 0){vol = abs(vol) + 128;}
            writeWire(VOLUME_GAIN, vol); 
   }

void BD37534FV::setFront_1(int front_1){
            if(front_1 > 0){front_1 = 128 - front_1;}
            if(front_1 <= 0){front_1 = abs(front_1) + 128;}
            
            writeWire(FADER_1_FRONT, front_1); 
   }

void BD37534FV::setFront_2(int front_2){
            if(front_2 > 0){front_2 = 128 - front_2;}
            if(front_2 <= 0){front_2 = abs(front_2) + 128;}
            
            writeWire(FADER_2_FRONT, front_2); 
   }

void BD37534FV::setRear_1(int rear_1){
            if(rear_1 > 0){rear_1 = 128 - rear_1;}
            if(rear_1 <= 0){rear_1 = abs(rear_1) + 128;}
            
            writeWire(FADER_1_REAR, rear_1); 
   }

void BD37534FV::setRear_2(int rear_2){
            if(rear_2 > 0){rear_2 = 128 - rear_2;}
            if(rear_2 <= 0){rear_2 = abs(rear_2) + 128;}
           
            writeWire(FADER_2_REAR, rear_2); 
   }

void BD37534FV::setSub(int sub){
            if(sub > 0){sub = 128 - sub;}
            if(sub <= 0){sub = abs(sub) + 128;}
            
            writeWire(FADER_SUB, sub); 
   }

void BD37534FV::mix(){
            writeWire(MIXING, 0b11111111); 
   }

void BD37534FV::setBass_setup(int bass_q, int bass_f){
            switch(bass_q){
               case 0: bass_q = 0b00000000;break;
               case 1: bass_q = 0b00000001;break;
               case 2: bass_q = 0b00000010;break;
               case 3: bass_q = 0b00000011;break;  
   }
            switch(bass_f){
               case 0: bass_f = 0b00000000;break;
               case 1: bass_f = 0b00010000;break;
               case 2: bass_f = 0b00100000;break;
               case 3: bass_f = 0b00110000;break;  
   }
            int bass_s_sum = bass_q + bass_f;
            writeWire(BASS_SETUP, bass_s_sum); 
   }

void BD37534FV::setTreble_setup(int treb_q, int treb_f){
            switch(treb_q){
               case 0: treb_q = 0b00000000;break;
               case 1: treb_q = 0b00000001;break; 
   }
            switch(treb_f){
               case 0: treb_f = 0b00000000;break;
               case 1: treb_f = 0b00010000;break;
               case 2: treb_f = 0b00100000;break;
               case 3: treb_f = 0b00110000;break;  
   }
            int treb_s_sum = treb_q + treb_f;
            writeWire(TREBLE_SETUP, treb_s_sum); 
   }

void BD37534FV::setBass_gain(int bass_gain){
                 if(bass_gain>0){bass_gain = bass_gain + 0b00000000;}                     
                 if(bass_gain<=0){bass_gain = abs(bass_gain) + 0b10000000;}  
               writeWire(BASS_GAIN, bass_gain);   
   }

void BD37534FV::setMiddle_gain(int mid_gain){
                 if(mid_gain>0){mid_gain = mid_gain + 0b00000000;}                     
                 if(mid_gain<=0){mid_gain = abs(mid_gain) + 0b10000000;}  
               writeWire(MIDDLE_GAIN, mid_gain);   
   }

void BD37534FV::setTreble_gain(int treb_gain){
                 if(treb_gain>0){treb_gain = treb_gain + 0b00000000;}                     
                 if(treb_gain<=0){treb_gain = abs(treb_gain) + 0b10000000;}  
               writeWire(TREBLE_GAIN, treb_gain);   
   }

void BD37534FV::setLoudness_gain(int loud_gain){
               writeWire(LOUDNESS_GAIN, loud_gain);  
   }


void BD37534FV::setMiddle_setup(int mid_q, int mid_f){
            switch(mid_q){
               case 0: mid_q = 0b00000000;break;
               case 1: mid_q = 0b00000001;break;
               case 2: mid_q = 0b00000010;break;
               case 3: mid_q = 0b00000011;break;  
   }
            switch(mid_f){
               case 0: mid_f = 0b00000000;break;
               case 1: mid_f = 0b00010000;break;
               case 2: mid_f = 0b00100000;break;
               case 3: mid_f = 0b00110000;break;  
   }
            int mid_s_sum = mid_q + mid_f;
            writeWire(MIDDLE_SETUP, mid_s_sum); 
   }



void BD37534FV::writeWire(char a, char b){
  Wire.beginTransmission(BD37534FV_address);
  Wire.write (a);
  Wire.write (b);
  Wire.endTransmission();
}

Оптимизированный вариант библиотеки - Данный контент доступен только зарегистрированным пользователям.

2

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

Скетч протестирован!!!

Меню 1
1.Громкость -79...15 дБ
2.Тембр ВЧ -20...20 дБ
3.Тембр СЧ -20...20 дБ
4.Тембр НЧ -20...20 дБ

Меню 2
1.Предусилитель входа 0...20 дБ (независимое для каждого входа)
2.Тонкомпенсация центральная частота
3.Тонкомпенсация усиление
4.Регулировка усиления для каждого выхода раздельная -79...15 дБ (для перебора выхода нажимать кнопку IN)
5.Центральная частота ВЧ
6.Центральная частота СЧ
7.Центральная частота НЧ
8.Центральная частота сабвуфер
9. Добростность ВЧ
10.Добротность СЧ
11.Добротность НЧ
12.Фаза

Четыре кнопки управления:
1.POWER
2.MUTE
3.IN
4.MENU2

Энкодер - регулировка всех пунктов меню и меню2
ИК-пульт - полное дублирование энкодера и всех кнопок

NANO

Скетч использует 29222 байт (95%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 1309 байт (63%) динамической памяти, оставляя 739 байт для локальных переменных. Максимум: 2048 байт.

#define IR_1 0x2FDD02F // Кнопка вверх
#define IR_2 0x2FD32CD // Кнопка вниз
#define IR_3 0x2FD906F // Кнопка >
#define IR_4 0x2FDF20D // Кнопка <
#define IR_5 0x2FD708F // Кнопка IN
#define IR_6 0x2FD6A95 // Кнопка MUTE
#define IR_7 0x2FD00FF // Кнопка POWER
#define IR_8 0x2FDB24D // Кнопка MENU2

#include <Wire.h> 
#include <BD37534FV.h>// https://github.com/liman324/BD37534FV/archive/master.zip
#include <EEPROM.h>
#include <Encoder.h>  // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#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
#include <LiquidCrystal_I2C.h> //Библиотека -  http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
  BD37534FV tda; 
  LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей 
  IRrecv irrecv(12); // указываем вывод модуля IR приемника
  Encoder myEnc(9, 8);//CLK, DT
  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};  
  unsigned long time,oldPosition  = -999,newPosition;
  int gr1,gr2,vol,vol_d,z,z0,z1,w,w2,menu,treb,treb_d,middle,middle_d,bass,bass_d,in,mute,power,menu2=100,www,gain0,gain1,gain2,gain3,gain_d,lon_f,lon,lon_d;
  int out,vol_out,rf,lf,rt,lt,sab,treb_c,mid_c,bas_c,sab_f,treb_q,mid_q,bas_q,faza;

void setup(){
   Wire.begin();lcd.init();lcd.backlight();irrecv.enableIRIn();Serial.begin(9600);
   lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
   lcd.setCursor(0,0);lcd.print("    POWER ON   ");delay(1000);lcd.clear();// ЗАСТАВКА
   MsTimer2::set(3, to_Timer);MsTimer2::start();
   if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении
     pinMode(2,INPUT);// МЕНЮ КНОПКА SW энкодера
     pinMode(3,INPUT);// ВЫБОР ВХОДА КНОПКА IN
     pinMode(4,INPUT);// КНОПКА MENU2
     pinMode(5,INPUT);// КНОПКА POWER
     pinMode(6,INPUT);// КНОПКА MUTE
     pinMode(7,OUTPUT);//  STANDBY
     vol = EEPROM.read(0)-79;treb = EEPROM.read(1)-20;middle = 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);lon = EEPROM.read(8);lon_f = EEPROM.read(9);
     rf = EEPROM.read(10);lf = EEPROM.read(11);rt = EEPROM.read(12);lt = EEPROM.read(13);sab = EEPROM.read(14);
     treb_c = EEPROM.read(15);mid_c = EEPROM.read(16);bas_c = EEPROM.read(17);sab_f = EEPROM.read(18);treb_q = EEPROM.read(19);
     mid_q = EEPROM.read(20);bas_q = EEPROM.read(21);faza = EEPROM.read(22);
   audio();
}

void loop(){
   if(digitalRead(2)==LOW&&power==0&&menu2==100){menu++;cl();time=millis();w=1;w2=1;if(menu>3){menu=0;}}// меню
   if(digitalRead(3)==HIGH&&power==0&&menu2!=3&&mute==0){in++;;cl();time=millis();w=1;w2=1;www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN
   if(digitalRead(6)==HIGH&&mute==0&&power==0){mute=1;cl();w=0;w2=1;lcd.print("      MUTE     ");menu=100;menu2=100;audio();}// mute on
   if(digitalRead(6)==HIGH&&mute==1&&power==0){mute=0;cl();time=millis();w=1;w2=1;menu=0;myEnc.write(0);audio();}// mute off
   if(digitalRead(5)==HIGH&&power==0){power=1;mute=1;audio();lcd.clear();lcd.setCursor(0,0);lcd.print("   POWER OFF   ");w=0;menu=100;menu2=100;delay(3000);lcd.noBacklight();}// power off
   if(digitalRead(5)==HIGH&&power==1){power=0;mute=0;audio();lcd.backlight();lcd.clear();lcd.setCursor(0,0);lcd.print("   POWER  ON   ");menu=0;time=millis();w=1;w2=1;myEnc.write(0);delay(3000);lcd.clear();}// power on
   if(power==0){digitalWrite(7,HIGH);}if(power==1){digitalWrite(7,LOW);} // выход STANDBY
   
   if(digitalRead(4)==HIGH&&power==0&&menu<4){menu2=0;menu=100;cl();time=millis();w=1;w2=1;lcd.setCursor(0,0);lcd.print("     MENU 2   ");delay(2000);}// menu 2 on
   if(digitalRead(4)==HIGH&&power==0&&menu>3){menu2=100;menu=0;cl();time=millis();w=1;w2=1;}// menu2 off
   if(digitalRead(2)==LOW&&power==0&&menu>3){menu2++;cl();time=millis();w=1;w2=1;if(menu2>11){menu2=0;}}// меню 2
   
   ////////////////////// 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(ir.value==IR_1&&power==0&&menu2==100){menu++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu>3){menu=0;}}// меню кнопка вверх 
    if(ir.value==IR_2&&power==0&&menu2==100){menu--;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu<0){menu=3;}}// меню кнопка вниз
    if(ir.value==IR_1&&power==0&&menu==100){menu2++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu2>11){menu2=0;}}// меню2 кнопка вверх 
    if(ir.value==IR_2&&power==0&&menu==100){menu2--;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu2<0){menu2=11;}}// меню2 кнопка вниз
    
    if(ir.value==IR_5&&power==0&&menu2!=3&&mute==0){in++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN
    
    if(ir.value==IR_6&&mute==0&&power==0){mute=1;gr1=0;gr2=0;cl();w=0;w2=1;lcd.print("      MUTE     ");menu=100;menu2=100;audio();}// mute on
    if(ir.value==IR_6&&mute==1&&power==0){mute=0;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;menu=0;myEnc.write(0);audio();}// mute off
    
    if(ir.value==IR_8&&power==0&&menu<4){menu2=0;gr1=0;gr2=0;menu=100;cl();time=millis();w=1;w2=1;lcd.setCursor(0,0);lcd.print("     MENU 2   ");delay(2000);}// menu 2 on
    if(ir.value==IR_8&&power==0&&menu>3){menu2=100;gr1=0;gr2=0;menu=0;cl();time=millis();w=1;w2=1;}// menu2 off
    
    if(ir.value==IR_7&&power==0){power=1;mute=1;audio();gr1=0;gr2=0;cl();lcd.setCursor(0,0);lcd.print("   POWER OFF   ");w=0;menu=100;menu2=100;delay(3000);lcd.noBacklight();}// power off
    if(ir.value==IR_7&&power==1){power=0;mute=0;audio();gr1=0;gr2=0;lcd.backlight();cl();lcd.setCursor(0,0);lcd.print("   POWER  ON   ");menu=0;time=millis();w=1;w2=1;myEnc.write(0);delay(3000);lcd.clear();}// power on
    
    //Serial.println(vol);
/////////////////////////////// VOLUME -79 ... +15 дБ ////////////////////////////////////////////////
 if(menu==0){
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w2=1;vol_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w2=1;vol_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w2=1;vol_func();audio();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w2=1;vol_func();audio();}// кнопка <<<<<<
   
   if (newPosition != oldPosition){oldPosition = newPosition;
     vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;vol_func();audio();} 
     lcd.setCursor(0,0);lcd.print("VOLUME  ");
     lcd.print(" ");lcd.print(vol);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol_d=vol/2+40;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=vol_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}w2=0;}}
   
///////////////////////// TREBLE +/-20 dB /////////////////////////////////////////////////////////
   if(menu==1){
     if(ir.value==IR_3){treb++;gr1=1;gr2=0;cl1();w2=1;treb_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){treb++;gr2=0;cl1();w2=1;treb_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){treb--;gr1=0;gr2=1;cl1();w2=1;treb_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){treb--;gr1=0;cl1();w2=1;treb_func();audio();}// кнопка <<<<<<
    
     if (newPosition != oldPosition) {
    oldPosition = newPosition;
    treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;treb_func();audio();} 
   lcd.setCursor(0,0);lcd.print("TREBLE  ");
   lcd.print(" ");lcd.print(treb);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");treb_d=treb+20;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=treb_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+1,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+1,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+1,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+1,1);lcd.write((uint8_t)2);}w2=0;}}

/////////////////////////// MIDDLE +/-20 dB ////////////////////////////////////////////////////////
   if(menu==2){
     if(ir.value==IR_3){middle++;gr1=1;gr2=0;cl1();w2=1;middle_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){middle++;gr2=0;cl1();w2=1;middle_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){middle--;gr1=0;gr2=1;cl1();w2=1;middle_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){middle--;gr1=0;cl1();w2=1;middle_func();audio();}// кнопка <<<<<<
    
     if (newPosition != oldPosition) {
    oldPosition = newPosition;
    middle=middle+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;middle_func();audio();} 
   lcd.setCursor(0,0);lcd.print("MIDDLE  ");
   lcd.print(" ");lcd.print(middle);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");middle_d=middle+20;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=middle_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+1,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+1,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+1,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+1,1);lcd.write((uint8_t)2);}w2=0;}}

/////////////////////// BASS +/-20 dB ///////////////////////////////////////////////////////////
   if(menu==3){
     if(ir.value==IR_3){bass++;gr1=1;gr2=0;cl1();w2=1;bass_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){bass++;gr2=0;cl1();w2=1;bass_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){bass--;gr1=0;gr2=1;cl1();w2=1;bass_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){bass--;gr1=0;cl1();w2=1;bass_func();audio();}// кнопка <<<<<<  
    
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;bass_func();audio();} 
   lcd.setCursor(0,0);lcd.print("BASS    ");
   lcd.print(" ");lcd.print(bass);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");bass_d=bass+20;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=bass_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+1,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+1,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+1,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+1,1);lcd.write((uint8_t)2);}w2=0;}}  

//////////////////////////  MENU 2 //////////////////////////////////////////////////////////////////////

//////////////// IN + GAIN /////////////////////////////////////////////////////////////
   if(menu2==0){ 
       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();w2=1;gain_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){gain0++;gr2=0;cl1();w2=1;gain_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){gain0--;gr1=0;gr2=1;cl1();w2=1;gain_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){gain0--;gr1=0;cl1();w2=1;gain_func();audio();}// кнопка <<<<<<

    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    gain0=gain0+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;gain_func();audio();} 
   switch(in){
     case 0: gain1 = gain0;break;
     case 1: gain2 = gain0;break;
     case 2: gain3 = gain0;break;
     } 
    if(www==1){audio();www=0;}
  lcd.setCursor(0,0);lcd.print("Gain IN ");lcd.print(in+1);
      lcd.setCursor(10,0);lcd.print(" ");lcd.print(gain0);lcd.print(" ");lcd.setCursor(14,0);lcd.print("dB");gain_d=gain0*2;
   if(w2==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+1,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+1,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+1,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+1,1);lcd.write((uint8_t)2);}}w2=0;}

////////////////////////////// loudness ////////////////////////////////////////////////////
 if(menu2==1){  
     if(ir.value==IR_3){lon_f++;gr1=1;gr2=0;cl1();w2=1;lon_f_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){lon_f++;gr2=0;cl1();w2=1;lon_f_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){lon_f--;gr1=0;gr2=1;cl1();w2=1;lon_f_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){lon_f--;gr1=0;cl1();w2=1;lon_f_func();audio();}// кнопка <<<<<< 
  
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    lon_f=lon_f+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;lon_f_func();audio();} 

    lcd.setCursor(0,0);lcd.print("Loudness: ");
      switch(lon_f){
         case 0: lcd.print("250Hz ");break;
         case 1: lcd.print("400Hz ");break;
         case 2: lcd.print("800Hz ");break;
         case 3: lcd.print("FLAT  ");break;}}
   
//////////////////////////// loudness gain ////////////////////////////////////////////////
 if(menu2==2){
     if(ir.value==IR_3){lon++;gr1=1;gr2=0;cl1();w2=1;lon_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){lon++;gr2=0;cl1();w2=1;lon_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){lon--;gr1=0;gr2=1;cl1();w2=1;lon_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){lon--;gr1=0;cl1();w2=1;lon_func();audio();}// кнопка <<<<<< 
  
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      lon=lon+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;lon_func();audio();} 

   lcd.setCursor(0,0);lcd.print("Loud gain");
   lcd.print(" ");lcd.print(lon);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");lon_d=lon*2;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=lon_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+1,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+1,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+1,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+1,1);lcd.write((uint8_t)2);}w2=0;}}

 ////////////////////////////////////////// out /////////////////////////////////////////////////
 if(menu2==3){  
   if(digitalRead(3)==HIGH){out++;cl();time=millis();www=1;w=1;if(out>4){out=0;}audio();} // перебор выходов кнопкой IN
   if(ir.value==IR_5){out++;cl();time=millis();www=1;w=1;if(out>4){out=0;}audio();} // перебор выходов кнопкой IN
       switch(out){
          case 0:vol_out=rf;break;
          case 1:vol_out=lf;break;
          case 2:vol_out=rt;break;
          case 3:vol_out=lt;break;
          case 4:vol_out=sab;break;
          }

     if(ir.value==IR_3){vol_out++;gr1=1;gr2=0;cl1();w2=1;vol_out_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){vol_out++;gr2=0;cl1();w2=1;vol_out_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){vol_out--;gr1=0;gr2=1;cl1();w2=1;vol_out_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){vol_out--;gr1=0;cl1();w2=1;vol_out_func();audio();}// кнопка <<<<<< 
          
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      vol_out=vol_out+newPosition;myEnc.write(0);newPosition=0;time=millis();www=1;w=1;w2=1;vol_out_func();audio();} 
      
   lcd.setCursor(0,0);lcd.print("Volume OUT");lcd.setCursor(0,1);
      switch(out){
   case 0:rf=vol_out;lcd.print("RF:  ");lcd.print(rf);break;
   case 1:lf=vol_out;lcd.print("LF:  ");lcd.print(lf);break;
   case 2:rt=vol_out;lcd.print("RT:  ");lcd.print(rt);break;
   case 3:lt=vol_out;lcd.print("LT:  ");lcd.print(lt);break;
   case 4:sab=vol_out;lcd.print("SUBW:  ");lcd.print(sab);break;
   }
    if(www==1){audio();www=0;}
  lcd.print(" dB      ");}  

 /////////////////////////////////treble center//////////////////////////////////////////////////
 if(menu2==4){ 
     if(ir.value==IR_3){treb_c++;gr1=1;gr2=0;cl1();w2=1;treb_c_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){treb_c++;gr2=0;cl1();w2=1;treb_c_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){treb_c--;gr1=0;gr2=1;cl1();w2=1;treb_c_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){treb_c--;gr1=0;cl1();w2=1;treb_c_func();audio();}// кнопка <<<<<< 
  
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      treb_c=treb_c+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;treb_c_func();audio();} 
  
  lcd.setCursor(0,0);lcd.print("Treble Center ");
  lcd.setCursor(1,6);
    switch(treb_c){
      case 0: lcd.print(" 7.5 kHz");break;
      case 1: lcd.print("10.0 kHz");break;
      case 2: lcd.print("12.5 kHz");break;
      case 3: lcd.print("15.0 kHz");break;}}

 /////////////////////////////////middle center//////////////////////////////////////////////////
 if(menu2==5){ 
     if(ir.value==IR_3){mid_c++;gr1=1;gr2=0;cl1();w2=1;mid_c_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){mid_c++;gr2=0;cl1();w2=1;mid_c_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){mid_c--;gr1=0;gr2=1;cl1();w2=1;mid_c_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){mid_c--;gr1=0;cl1();w2=1;mid_c_func();audio();}// кнопка <<<<<<  
     
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      mid_c=mid_c+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;mid_c_func();audio();}   
    lcd.setCursor(0,0);lcd.print("Middle Center ");
    lcd.setCursor(1,6);
      switch(mid_c){
        case 0: lcd.print("0.5 kHz");break;
        case 1: lcd.print("1.0 kHz");break;
        case 2: lcd.print("1.5 kHz");break;
        case 3: lcd.print("2.5 kHz");break;}}     

////////////////////////////////////bass center/////////////////////////////////////////// 
 if(menu2==6){ 
     if(ir.value==IR_3){bas_c++;gr1=1;gr2=0;cl1();w2=1;bas_c_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){bas_c++;gr2=0;cl1();w2=1;bas_c_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){bas_c--;gr1=0;gr2=1;cl1();w2=1;bas_c_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){bas_c--;gr1=0;cl1();w2=1;bas_c_func();audio();}// кнопка <<<<<<  
     
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      bas_c=bas_c+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;bas_c_func();audio();}   
    lcd.setCursor(0,0);lcd.print("Bass Center ");
    lcd.setCursor(1,6);
      switch(bas_c){
         case 0: lcd.print("60 Hz ");break;
         case 1: lcd.print("80 Hz ");break;
         case 2: lcd.print("100 Hz");break;
         case 3: lcd.print("120 Hz");break;}}

//////////////////////////////////////subw//////////////////////////////////////////////// 
 if(menu2==7){ 
     if(ir.value==IR_3){sab_f++;gr1=1;gr2=0;cl1();w2=1;sab_f_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){sab_f++;gr2=0;cl1();w2=1;sab_f_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){sab_f--;gr1=0;gr2=1;cl1();w2=1;sab_f_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){sab_f--;gr1=0;cl1();w2=1;sab_f_func();audio();}// кнопка <<<<<<  
     
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      sab_f=sab_f+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;sab_f_func();audio();}   
    lcd.setCursor(0,0);lcd.print("Subwoofer Freq.");
    lcd.setCursor(1,6);
      switch(sab_f){
         case 0: lcd.print("FLAT  ");break;
         case 1: lcd.print("55 Hz ");break;
         case 2: lcd.print("85 Hz ");break;
         case 3: lcd.print("120 Hz");break; 
         case 4: lcd.print("160 Hz");break;}}  

 /////////////////////////////////treble Q//////////////////////////////////////////////////
 if(menu2==8){ 
     if(ir.value==IR_3){treb_q++;gr1=1;gr2=0;cl1();w2=1;treb_q_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){treb_q++;gr2=0;cl1();w2=1;treb_q_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){treb_q--;gr1=0;gr2=1;cl1();w2=1;treb_q_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){treb_q--;gr1=0;cl1();w2=1;treb_q_func();audio();}// кнопка <<<<<< 
  
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      treb_q=treb_q+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;treb_q_func();audio();} 
  
  lcd.setCursor(0,0);lcd.print("Treble Q ");
  lcd.setCursor(1,6);
    switch(treb_q){
      case 0: lcd.print("0.75");break;
      case 1: lcd.print("1.25");break;}}  

 /////////////////////////////////middle Q//////////////////////////////////////////////////
 if(menu2==9){ 
     if(ir.value==IR_3){mid_q++;gr1=1;gr2=0;cl1();w2=1;mid_q_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){mid_q++;gr2=0;cl1();w2=1;mid_q_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){mid_q--;gr1=0;gr2=1;cl1();w2=1;mid_q_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){mid_q--;gr1=0;cl1();w2=1;mid_q_func();audio();}// кнопка <<<<<<  
     
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      mid_q=mid_q+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;mid_q_func();audio();}   
    lcd.setCursor(0,0);lcd.print("Middle Q ");
    lcd.setCursor(1,6);
      switch(mid_q){
        case 0: lcd.print("0.75");break;
        case 1: lcd.print("1.00");break;
        case 2: lcd.print("1.25");break;
        case 3: lcd.print("1.50");break;}}    

 /////////////////////////////////bass Q//////////////////////////////////////////////////
 if(menu2==10){ 
     if(ir.value==IR_3){bas_q++;gr1=1;gr2=0;cl1();w2=1;bas_q_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){bas_q++;gr2=0;cl1();w2=1;bas_q_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){bas_q--;gr1=0;gr2=1;cl1();w2=1;bas_q_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){bas_q--;gr1=0;cl1();w2=1;bas_q_func();audio();}// кнопка <<<<<<  
     
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      bas_q=bas_q+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;bas_q_func();audio();}   
    lcd.setCursor(0,0);lcd.print("Bass Q ");
    lcd.setCursor(1,6);
      switch(bas_q){
        case 0: lcd.print("0.5");break;
        case 1: lcd.print("1.0");break;
        case 2: lcd.print("1.5");break;
        case 3: lcd.print("2.0");break;}}     

  /////////////////////////////////LPF Phase//////////////////////////////////////////////////
 if(menu2==11){ 
     if(ir.value==IR_3){faza++;gr1=1;gr2=0;cl1();w2=1;faza_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){faza++;gr2=0;cl1();w2=1;faza_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){faza--;gr1=0;gr2=1;cl1();w2=1;faza_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){faza--;gr1=0;cl1();w2=1;faza_func();audio();}// кнопка <<<<<<  
     
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      faza=faza+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;faza_func();audio();}   
    lcd.setCursor(0,0);lcd.print("LPF Phase ");
    lcd.setCursor(1,6);
      switch(faza){
        case 0: lcd.print("  0");break;
        case 1: lcd.print("180");break;}}                  

///////////////////// EEPROM ///////////////////////////////////////////////////////////////         
  if(millis()-time>10000 && w==1 && power==0){
     EEPROM.update(0,vol+79);EEPROM.update(1,treb+20);EEPROM.update(2,middle+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,lon);EEPROM.update(9,lon_f);
     EEPROM.update(10,rf);EEPROM.update(11,lf);EEPROM.update(12,rt);EEPROM.update(13,lt);EEPROM.update(14,sab);
     EEPROM.update(15,treb_c);EEPROM.update(16,mid_c);EEPROM.update(17,bas_c);EEPROM.update(18,sab_f);EEPROM.update(19,treb_q);
     EEPROM.update(20,mid_q);EEPROM.update(21,bas_q);EEPROM.update(22,faza);
     menu2=100;menu=0;w=0;w2=1;cl();}
  
  }// loop

void faza_func(){if(faza>1){faza=0;}if(faza<0){faza=1;}}
void bas_q_func(){if(bas_q>3){bas_q=0;}if(bas_q<0){bas_q=3;}}
void mid_q_func(){if(mid_q>3){mid_q=0;}if(mid_q<0){mid_q=3;}}
void treb_q_func(){if(treb_q>1){treb_q=0;}if(treb_q<0){treb_q=1;}}
void sab_f_func(){if(sab_f>4){sab_f=0;}if(sab_f<0){sab_f=4;}}
void bas_c_func(){if(bas_c>3){bas_c=0;}if(bas_c<0){bas_c=3;}}
void mid_c_func(){if(mid_c>3){mid_c=0;}if(mid_c<0){mid_c=3;}}
void treb_c_func(){if(treb_c>3){treb_c=0;}if(treb_c<0){treb_c=3;}}
void vol_out_func(){if(vol_out>15){vol_out=15;}if(vol_out<-79){vol_out=-79;}}
void lon_func(){if(lon>20){lon=20;}if(lon<0){lon=0;}}
void lon_f_func(){if(lon_f>3){lon_f=0;}if(lon_f<0){lon_f=3;}}
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 middle_func(){if(middle>20){middle=20;}if(middle<-20){middle=-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 cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(100);}
void to_Timer(){newPosition = myEnc.read()/4;}
void audio(){
   tda.setSetup_1(1,2,0); // default (1,2,0)
   tda.setSetup_2(sab_f,0,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
   tda.setLoudness_f(lon_f); // 250Hz 400Hz 800Hz Prohibition = int 0...3
   tda.setIn(in); // 0...2
   tda.setIn_gain(gain0,mute); // in_gain -- 0...20 = 0...20 dB, mute -- 0 default 
   tda.setVol(vol); // -79...+15 dB = int -79...15
   tda.setFront_1(rf); // -79...+15 dB = int -79...15
   tda.setFront_2(lf); // -79...+15 dB = int -79...15
   tda.setRear_1(rt); // -79...+15 dB = int -79...15
   tda.setRear_2(lt); // -79...+15 dB = int -79...15
   tda.setSub(sab); // -79...+15 dB = int -79...15
   tda.mix();
   tda.setBass_setup(bas_q,bas_c); // 0.5 1.0 1.5 2.0 --- int 0...3, 60Hz 80Hz 100Hz 120Hz --- int 0...3
   tda.setMiddle_setup(mid_q,mid_c); // 0.75 1.0 1.25 1.5 --- int 0...3, 500Hz 1kHz 1.5kHz 2.5kHz --- int 0...3
   tda.setTreble_setup(treb_q,treb_c); // 0.75 1.25  --- int 0...1, 7.5kHz 10kHz 12.5kHz 15kHz --- int 0...3
   tda.setBass_gain(bass); // --20 ... +20 dB = int -20 ... 20  
   tda.setMiddle_gain(middle); // --20 ... +20 dB = int -20 ... 20
   tda.setTreble_gain(treb); // --20 ... +20 dB = int -20 ... 20   
   tda.setLoudness_gain(lon); // 0 ... 20 dB = int 0 ... 20
  }

3

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

Добавлен датчик температуры DS18B20 (вход А0), который устанавливается на радиатор в усилителе, при достижении 50 гр. Цельсия цифровой выход Arduino D13 меняет свое лог. состояние с 0 до 1, активируя работу кулера охлаждения радиатора УНЧ. Показания температуры выводится в режиме MUTE.

NANO

Скетч использует 30626 байт (99%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 1354 байт (66%) динамической памяти, оставляя 694 байт для локальных переменных. Максимум: 2048 байт.

#define IR_1 0x2FDD02F // Кнопка вверх
#define IR_2 0x2FD32CD // Кнопка вниз
#define IR_3 0x2FD906F // Кнопка >
#define IR_4 0x2FDF20D // Кнопка <
#define IR_5 0x2FD708F // Кнопка IN
#define IR_6 0x2FD6A95 // Кнопка MUTE
#define IR_7 0x2FD00FF // Кнопка POWER
#define IR_8 0x2FDB24D // Кнопка MENU2

#include <Wire.h> 
#include <OneWire.h>          // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
#include <DallasTemperature.h>// http://rcl-radio.ru/wp-content/uploads/2018/07/DallasTemperature.zip
#include <BD37534FV.h>// https://github.com/liman324/BD37534FV/archive/master.zip
#include <EEPROM.h>
#include <Encoder.h>  // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#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
#include <LiquidCrystal_I2C.h> //Библиотека -  http://forum.rcl-radio.ru/misc.php?action=pan_download&item=45&download=1
  BD37534FV tda; 
  LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей 
  IRrecv irrecv(12); // указываем вывод модуля IR приемника
  Encoder myEnc(9, 8);//CLK, DT
  decode_results ir; 
  OneWire oneWire(A0);// вход датчика 18b20
  DallasTemperature temp(&oneWire);
  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};  
  unsigned long time,time2,oldPosition  = -999,newPosition;
  int gr1,gr2,vol,vol_d,z,z0,z1,w,w2,menu,treb,treb_d,middle,middle_d,bass,bass_d,in,mute,power,menu2=100,www,gain0,gain1,gain2,gain3,gain_d,lon_f,lon,lon_d;
  int out,vol_out,rf,lf,rt,lt,sab,treb_c,mid_c,bas_c,sab_f,treb_q,mid_q,bas_q,faza;

void setup(){
   temp.begin(); temp.setResolution(9);//9 бит 
   Wire.begin();lcd.init();lcd.backlight();irrecv.enableIRIn();Serial.begin(9600);
   lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
   lcd.setCursor(0,0);lcd.print("    POWER ON   ");delay(1000);lcd.clear();// ЗАСТАВКА
   MsTimer2::set(3, to_Timer);MsTimer2::start();
   if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении
     pinMode(2,INPUT);// МЕНЮ КНОПКА SW энкодера
     pinMode(3,INPUT);// ВЫБОР ВХОДА КНОПКА IN
     pinMode(4,INPUT);// КНОПКА MENU2
     pinMode(5,INPUT);// КНОПКА POWER
     pinMode(6,INPUT);// КНОПКА MUTE
     pinMode(7,OUTPUT);//  STANDBY
     pinMode(13,OUTPUT);//  cooling
     vol = EEPROM.read(0)-79;treb = EEPROM.read(1)-20;middle = 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);lon = EEPROM.read(8);lon_f = EEPROM.read(9);
     rf = EEPROM.read(10);lf = EEPROM.read(11);rt = EEPROM.read(12);lt = EEPROM.read(13);sab = EEPROM.read(14);
     treb_c = EEPROM.read(15);mid_c = EEPROM.read(16);bas_c = EEPROM.read(17);sab_f = EEPROM.read(18);treb_q = EEPROM.read(19);
     mid_q = EEPROM.read(20);bas_q = EEPROM.read(21);faza = EEPROM.read(22);
   audio();
}

void loop(){
   if(digitalRead(2)==LOW&&power==0&&menu2==100){menu++;cl();time=millis();w=1;w2=1;if(menu>3){menu=0;}}// меню
   if(digitalRead(3)==HIGH&&power==0&&menu2!=3&&mute==0){in++;;cl();time=millis();w=1;w2=1;www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN
   if(digitalRead(6)==HIGH&&mute==0&&power==0){mute=1;cl();w=0;w2=1;lcd.print("  MUTE   ");lcd.print(temp.getTempCByIndex(0),1);lcd.print("C ");menu=100;menu2=100;audio();}// mute on
   if(digitalRead(6)==HIGH&&mute==1&&power==0){mute=0;cl();time=millis();w=1;w2=1;menu=0;myEnc.write(0);audio();}// mute off
   if(digitalRead(5)==HIGH&&power==0){power=1;mute=1;audio();lcd.clear();lcd.setCursor(0,0);lcd.print("   POWER OFF   ");w=0;menu=100;menu2=100;delay(3000);lcd.noBacklight();}// power off
   if(digitalRead(5)==HIGH&&power==1){power=0;mute=0;audio();lcd.backlight();lcd.clear();lcd.setCursor(0,0);lcd.print("   POWER  ON   ");menu=0;time=millis();w=1;w2=1;myEnc.write(0);delay(3000);lcd.clear();}// power on
   if(power==0){digitalWrite(7,HIGH);}if(power==1){digitalWrite(7,LOW);} // выход STANDBY
   
   if(digitalRead(4)==HIGH&&power==0&&menu<4){menu2=0;menu=100;cl();time=millis();w=1;w2=1;lcd.setCursor(0,0);lcd.print("     MENU 2   ");delay(2000);}// menu 2 on
   if(digitalRead(4)==HIGH&&power==0&&menu>3){menu2=100;menu=0;cl();time=millis();w=1;w2=1;}// menu2 off
   if(digitalRead(2)==LOW&&power==0&&menu>3){menu2++;cl();time=millis();w=1;w2=1;if(menu2>11){menu2=0;}}// меню 2
   
   ////////////////////// 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(ir.value==IR_1&&power==0&&menu2==100){menu++;sd1();if(menu>3){menu=0;}}// меню кнопка вверх 
    if(ir.value==IR_2&&power==0&&menu2==100){menu--;sd1();if(menu<0){menu=3;}}// меню кнопка вниз
    if(ir.value==IR_1&&power==0&&menu==100){menu2++;sd1();if(menu2>11){menu2=0;}}// меню2 кнопка вверх 
    if(ir.value==IR_2&&power==0&&menu==100){menu2--;sd1();if(menu2<0){menu2=11;}}// меню2 кнопка вниз
    
    if(ir.value==IR_5&&power==0&&menu2!=3&&mute==0){in++;sd1();www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN
    
    if(ir.value==IR_6&&mute==0&&power==0){mute=1;gr1=0;gr2=0;cl();w=0;w2=1;lcd.print("  MUTE   ");lcd.print(temp.getTempCByIndex(0),1);lcd.print("C ");menu=100;menu2=100;audio();}// mute on
    if(ir.value==IR_6&&mute==1&&power==0){mute=0;sd1();menu=0;myEnc.write(0);audio();}// mute off
    
    if(ir.value==IR_8&&power==0&&menu<4){menu2=0;gr1=0;gr2=0;menu=100;cl();time=millis();w=1;w2=1;lcd.setCursor(0,0);lcd.print("     MENU 2   ");delay(2000);}// menu 2 on
    if(ir.value==IR_8&&power==0&&menu>3){menu2=100;gr1=0;gr2=0;menu=0;cl();time=millis();w=1;w2=1;}// menu2 off
    
    if(ir.value==IR_7&&power==0){power=1;mute=1;audio();gr1=0;gr2=0;cl();lcd.setCursor(0,0);lcd.print("   POWER OFF   ");w=0;menu=100;menu2=100;delay(3000);lcd.noBacklight();}// power off
    if(ir.value==IR_7&&power==1){power=0;mute=0;audio();gr1=0;gr2=0;lcd.backlight();cl();lcd.setCursor(0,0);lcd.print("   POWER  ON   ");menu=0;time=millis();w=1;w2=1;myEnc.write(0);delay(3000);lcd.clear();}// power on
    
    //Serial.println(vol);
/////////////////////////////// VOLUME -79 ... +15 дБ ////////////////////////////////////////////////
 if(menu==0){
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w2=1;vol_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w2=1;vol_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w2=1;vol_func();audio();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w2=1;vol_func();audio();}// кнопка <<<<<<
   
   if (newPosition != oldPosition){sd2();
     vol=vol+newPosition;sd();vol_func();audio();} 
     lcd.setCursor(0,0);lcd.print("VOLUME  ");
     lcd.print(" ");lcd.print(vol);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol_d=vol/2+40;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=vol_d;z++,z1++){sd3();
   if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0,1);lcd.write((uint8_t)2);}w2=0;}}
   
///////////////////////// TREBLE +/-20 dB /////////////////////////////////////////////////////////
   if(menu==1){
     if(ir.value==IR_3){treb++;gr1=1;gr2=0;cl1();w2=1;treb_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){treb++;gr2=0;cl1();w2=1;treb_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){treb--;gr1=0;gr2=1;cl1();w2=1;treb_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){treb--;gr1=0;cl1();w2=1;treb_func();audio();}// кнопка <<<<<<
    
     if (newPosition != oldPosition) {
    sd2();
    treb=treb+newPosition;sd();treb_func();audio();} 
   lcd.setCursor(0,0);lcd.print("TREBLE  ");
   lcd.print(" ");lcd.print(treb);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");treb_d=treb+20;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=treb_d;z++,z1++){sd3();
   if(z1==1){lcd.setCursor(z0+1,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+1,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+1,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+1,1);lcd.write((uint8_t)2);}w2=0;}}

/////////////////////////// MIDDLE +/-20 dB ////////////////////////////////////////////////////////
   if(menu==2){
     if(ir.value==IR_3){middle++;gr1=1;gr2=0;cl1();w2=1;middle_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){middle++;gr2=0;cl1();w2=1;middle_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){middle--;gr1=0;gr2=1;cl1();w2=1;middle_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){middle--;gr1=0;cl1();w2=1;middle_func();audio();}// кнопка <<<<<<
    
     if (newPosition != oldPosition) {
    sd2();
    middle=middle+newPosition;sd();middle_func();audio();} 
   lcd.setCursor(0,0);lcd.print("MIDDLE  ");
   lcd.print(" ");lcd.print(middle);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");middle_d=middle+20;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=middle_d;z++,z1++){sd3();
   if(z1==1){lcd.setCursor(z0+1,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+1,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+1,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+1,1);lcd.write((uint8_t)2);}w2=0;}}

/////////////////////// BASS +/-20 dB ///////////////////////////////////////////////////////////
   if(menu==3){
     if(ir.value==IR_3){bass++;gr1=1;gr2=0;cl1();w2=1;bass_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){bass++;gr2=0;cl1();w2=1;bass_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){bass--;gr1=0;gr2=1;cl1();w2=1;bass_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){bass--;gr1=0;cl1();w2=1;bass_func();audio();}// кнопка <<<<<<  
    
    if (newPosition != oldPosition) {
    sd2();
    bass=bass+newPosition;sd();bass_func();audio();} 
   lcd.setCursor(0,0);lcd.print("BASS    ");
   lcd.print(" ");lcd.print(bass);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");bass_d=bass+20;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=bass_d;z++,z1++){sd3();
   if(z1==1){lcd.setCursor(z0+1,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+1,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+1,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+1,1);lcd.write((uint8_t)2);}w2=0;}}  

//////////////////////////  MENU 2 //////////////////////////////////////////////////////////////////////

//////////////// IN + GAIN /////////////////////////////////////////////////////////////
   if(menu2==0){ 
       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();w2=1;gain_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){gain0++;gr2=0;cl1();w2=1;gain_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){gain0--;gr1=0;gr2=1;cl1();w2=1;gain_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){gain0--;gr1=0;cl1();w2=1;gain_func();audio();}// кнопка <<<<<<

    if (newPosition != oldPosition) {
    sd2();
    gain0=gain0+newPosition;sd();gain_func();audio();} 
   switch(in){
     case 0: gain1 = gain0;break;
     case 1: gain2 = gain0;break;
     case 2: gain3 = gain0;break;
     } 
    if(www==1){audio();www=0;}
  lcd.setCursor(0,0);lcd.print("Gain IN ");lcd.print(in+1);
      lcd.setCursor(10,0);lcd.print(" ");lcd.print(gain0);lcd.print(" ");lcd.setCursor(14,0);lcd.print("dB");gain_d=gain0*2;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=gain_d;z++,z1++){sd3();
   if(z1==1){lcd.setCursor(z0+1,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+1,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+1,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+1,1);lcd.write((uint8_t)2);}}w2=0;}

////////////////////////////// loudness ////////////////////////////////////////////////////
 if(menu2==1){  
     if(ir.value==IR_3){lon_f++;gr1=1;gr2=0;cl1();w2=1;lon_f_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){lon_f++;gr2=0;cl1();w2=1;lon_f_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){lon_f--;gr1=0;gr2=1;cl1();w2=1;lon_f_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){lon_f--;gr1=0;cl1();w2=1;lon_f_func();audio();}// кнопка <<<<<< 
  
    if (newPosition != oldPosition) {
    sd2();
    lon_f=lon_f+newPosition;sd();lon_f_func();audio();} 

    lcd.setCursor(0,0);lcd.print("Loudness: ");
      switch(lon_f){
         case 0: lcd.print("250Hz ");break;
         case 1: lcd.print("400Hz ");break;
         case 2: lcd.print("800Hz ");break;
         case 3: lcd.print("FLAT  ");break;}}
   
//////////////////////////// loudness gain ////////////////////////////////////////////////
 if(menu2==2){
     if(ir.value==IR_3){lon++;gr1=1;gr2=0;cl1();w2=1;lon_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){lon++;gr2=0;cl1();w2=1;lon_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){lon--;gr1=0;gr2=1;cl1();w2=1;lon_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){lon--;gr1=0;cl1();w2=1;lon_func();audio();}// кнопка <<<<<< 
  
      if (newPosition != oldPosition) {
      sd2();
      lon=lon+newPosition;sd();lon_func();audio();} 

   lcd.setCursor(0,0);lcd.print("Loud gain");
   lcd.print(" ");lcd.print(lon);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");lon_d=lon*2;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=lon_d;z++,z1++){sd3();
   if(z1==1){lcd.setCursor(z0+1,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+1,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+1,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+1,1);lcd.write((uint8_t)2);}w2=0;}}

 ////////////////////////////////////////// out /////////////////////////////////////////////////
 if(menu2==3){  
   if(digitalRead(3)==HIGH){out++;cl();time=millis();www=1;w=1;if(out>4){out=0;}audio();} // перебор выходов кнопкой IN
   if(ir.value==IR_5){out++;cl();time=millis();www=1;w=1;if(out>4){out=0;}audio();} // перебор выходов кнопкой IN
       switch(out){
          case 0:vol_out=rf;break;
          case 1:vol_out=lf;break;
          case 2:vol_out=rt;break;
          case 3:vol_out=lt;break;
          case 4:vol_out=sab;break;
          }

     if(ir.value==IR_3){vol_out++;gr1=1;gr2=0;cl1();w2=1;vol_out_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){vol_out++;gr2=0;cl1();w2=1;vol_out_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){vol_out--;gr1=0;gr2=1;cl1();w2=1;vol_out_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){vol_out--;gr1=0;cl1();w2=1;vol_out_func();audio();}// кнопка <<<<<< 
          
      if (newPosition != oldPosition) {
      sd2();
      vol_out=vol_out+newPosition;sd();;www=1;vol_out_func();audio();} 
      
   lcd.setCursor(0,0);lcd.print("Volume OUT");lcd.setCursor(0,1);
      switch(out){
   case 0:rf=vol_out;lcd.print("RF:  ");lcd.print(rf);break;
   case 1:lf=vol_out;lcd.print("LF:  ");lcd.print(lf);break;
   case 2:rt=vol_out;lcd.print("RT:  ");lcd.print(rt);break;
   case 3:lt=vol_out;lcd.print("LT:  ");lcd.print(lt);break;
   case 4:sab=vol_out;lcd.print("SUBW:  ");lcd.print(sab);break;
   }
    if(www==1){audio();www=0;}
  lcd.print(" dB      ");}  

 /////////////////////////////////treble center//////////////////////////////////////////////////
 if(menu2==4){ 
     if(ir.value==IR_3){treb_c++;gr1=1;gr2=0;cl1();w2=1;treb_c_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){treb_c++;gr2=0;cl1();w2=1;treb_c_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){treb_c--;gr1=0;gr2=1;cl1();w2=1;treb_c_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){treb_c--;gr1=0;cl1();w2=1;treb_c_func();audio();}// кнопка <<<<<< 
  
      if (newPosition != oldPosition) {
      sd2();
      treb_c=treb_c+newPosition;sd();treb_c_func();audio();} 
  
  lcd.setCursor(0,0);lcd.print("Treble Center ");
  lcd.setCursor(1,6);
    switch(treb_c){
      case 0: lcd.print(" 7.5 kHz");break;
      case 1: lcd.print("10.0 kHz");break;
      case 2: lcd.print("12.5 kHz");break;
      case 3: lcd.print("15.0 kHz");break;}}

 /////////////////////////////////middle center//////////////////////////////////////////////////
 if(menu2==5){ 
     if(ir.value==IR_3){mid_c++;gr1=1;gr2=0;cl1();w2=1;mid_c_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){mid_c++;gr2=0;cl1();w2=1;mid_c_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){mid_c--;gr1=0;gr2=1;cl1();w2=1;mid_c_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){mid_c--;gr1=0;cl1();w2=1;mid_c_func();audio();}// кнопка <<<<<<  
     
      if (newPosition != oldPosition) {
      sd2();
      mid_c=mid_c+newPosition;sd();mid_c_func();audio();}   
    lcd.setCursor(0,0);lcd.print("Middle Center ");
    lcd.setCursor(1,6);
      switch(mid_c){
        case 0: lcd.print("0.5 kHz");break;
        case 1: lcd.print("1.0 kHz");break;
        case 2: lcd.print("1.5 kHz");break;
        case 3: lcd.print("2.5 kHz");break;}}     

////////////////////////////////////bass center/////////////////////////////////////////// 
 if(menu2==6){ 
     if(ir.value==IR_3){bas_c++;gr1=1;gr2=0;cl1();w2=1;bas_c_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){bas_c++;gr2=0;cl1();w2=1;bas_c_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){bas_c--;gr1=0;gr2=1;cl1();w2=1;bas_c_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){bas_c--;gr1=0;cl1();w2=1;bas_c_func();audio();}// кнопка <<<<<<  
     
      if (newPosition != oldPosition) {
      sd2();
      bas_c=bas_c+newPosition;sd();bas_c_func();audio();}   
    lcd.setCursor(0,0);lcd.print("Bass Center ");
    lcd.setCursor(1,6);
      switch(bas_c){
         case 0: lcd.print("60 Hz ");break;
         case 1: lcd.print("80 Hz ");break;
         case 2: lcd.print("100 Hz");break;
         case 3: lcd.print("120 Hz");break;}}

//////////////////////////////////////subw//////////////////////////////////////////////// 
 if(menu2==7){ 
     if(ir.value==IR_3){sab_f++;gr1=1;gr2=0;cl1();w2=1;sab_f_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){sab_f++;gr2=0;cl1();w2=1;sab_f_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){sab_f--;gr1=0;gr2=1;cl1();w2=1;sab_f_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){sab_f--;gr1=0;cl1();w2=1;sab_f_func();audio();}// кнопка <<<<<<  
     
      if (newPosition != oldPosition) {
      sd2();
      sab_f=sab_f+newPosition;sd();sab_f_func();audio();}   
    lcd.setCursor(0,0);lcd.print("Subwoofer Freq.");
    lcd.setCursor(1,6);
      switch(sab_f){
         case 0: lcd.print("FLAT  ");break;
         case 1: lcd.print("55 Hz ");break;
         case 2: lcd.print("85 Hz ");break;
         case 3: lcd.print("120 Hz");break; 
         case 4: lcd.print("160 Hz");break;}}  

 /////////////////////////////////treble Q//////////////////////////////////////////////////
 if(menu2==8){ 
     if(ir.value==IR_3){treb_q++;gr1=1;gr2=0;cl1();w2=1;treb_q_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){treb_q++;gr2=0;cl1();w2=1;treb_q_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){treb_q--;gr1=0;gr2=1;cl1();w2=1;treb_q_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){treb_q--;gr1=0;cl1();w2=1;treb_q_func();audio();}// кнопка <<<<<< 
  
      if (newPosition != oldPosition) {
      sd2();
      treb_q=treb_q+newPosition;sd();treb_q_func();audio();} 
  
  lcd.setCursor(0,0);lcd.print("Treble Q ");
  lcd.setCursor(1,6);
    switch(treb_q){
      case 0: lcd.print("0.75");break;
      case 1: lcd.print("1.25");break;}}  

 /////////////////////////////////middle Q//////////////////////////////////////////////////
 if(menu2==9){ 
     if(ir.value==IR_3){mid_q++;gr1=1;gr2=0;cl1();w2=1;mid_q_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){mid_q++;gr2=0;cl1();w2=1;mid_q_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){mid_q--;gr1=0;gr2=1;cl1();w2=1;mid_q_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){mid_q--;gr1=0;cl1();w2=1;mid_q_func();audio();}// кнопка <<<<<<  
     
      if (newPosition != oldPosition) {
      sd2();
      mid_q=mid_q+newPosition;sd();mid_q_func();audio();}   
    lcd.setCursor(0,0);lcd.print("Middle Q ");
    lcd.setCursor(1,6);
      switch(mid_q){
        case 0: lcd.print("0.75");break;
        case 1: lcd.print("1.00");break;
        case 2: lcd.print("1.25");break;
        case 3: lcd.print("1.50");break;}}    

 /////////////////////////////////bass Q//////////////////////////////////////////////////
 if(menu2==10){ 
     if(ir.value==IR_3){bas_q++;gr1=1;gr2=0;cl1();w2=1;bas_q_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){bas_q++;gr2=0;cl1();w2=1;bas_q_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){bas_q--;gr1=0;gr2=1;cl1();w2=1;bas_q_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){bas_q--;gr1=0;cl1();w2=1;bas_q_func();audio();}// кнопка <<<<<<  
     
      if (newPosition != oldPosition) {
      sd2();
      bas_q=bas_q+newPosition;sd();bas_q_func();audio();}   
    lcd.setCursor(0,0);lcd.print("Bass Q ");
    lcd.setCursor(1,6);
      switch(bas_q){
        case 0: lcd.print("0.5");break;
        case 1: lcd.print("1.0");break;
        case 2: lcd.print("1.5");break;
        case 3: lcd.print("2.0");break;}}     

  /////////////////////////////////LPF Phase//////////////////////////////////////////////////
 if(menu2==11){ 
     if(ir.value==IR_3){faza++;gr1=1;gr2=0;cl1();w2=1;faza_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){faza++;gr2=0;cl1();w2=1;faza_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){faza--;gr1=0;gr2=1;cl1();w2=1;faza_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){faza--;gr1=0;cl1();w2=1;faza_func();audio();}// кнопка <<<<<<  
     
      if (newPosition != oldPosition) {
      sd2();
      faza=faza+newPosition;sd();faza_func();audio();}   
    lcd.setCursor(0,0);lcd.print("LPF Phase ");
    lcd.setCursor(1,6);
      switch(faza){
        case 0: lcd.print("  0");break;
        case 1: lcd.print("180");break;}}                  

///////////////////// EEPROM ///////////////////////////////////////////////////////////////         
  if(millis()-time>10000 && w==1 && power==0 && mute ==0){
     EEPROM.update(0,vol+79);EEPROM.update(1,treb+20);EEPROM.update(2,middle+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,lon);EEPROM.update(9,lon_f);
     EEPROM.update(10,rf);EEPROM.update(11,lf);EEPROM.update(12,rt);EEPROM.update(13,lt);EEPROM.update(14,sab);
     EEPROM.update(15,treb_c);EEPROM.update(16,mid_c);EEPROM.update(17,bas_c);EEPROM.update(18,sab_f);EEPROM.update(19,treb_q);
     EEPROM.update(20,mid_q);EEPROM.update(21,bas_q);EEPROM.update(22,faza);
     menu2=100;menu=0;w=0;w2=1;cl();time2=millis();}

     if(millis()-time2>10000&&w==0){temp.requestTemperatures();if(temp.getTempCByIndex(0)>50){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);}time2=millis();}
     
  }// loop

void sd3(){if(z1>2){z1=0;z0++;}}
void sd2(){oldPosition = newPosition;}
void sd1(){gr1=0;gr2=0;cl();time=millis();w=1;w2=1;}
void sd(){myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;}
void faza_func(){if(faza>1){faza=0;}if(faza<0){faza=1;}}
void bas_q_func(){if(bas_q>3){bas_q=0;}if(bas_q<0){bas_q=3;}}
void mid_q_func(){if(mid_q>3){mid_q=0;}if(mid_q<0){mid_q=3;}}
void treb_q_func(){if(treb_q>1){treb_q=0;}if(treb_q<0){treb_q=1;}}
void sab_f_func(){if(sab_f>4){sab_f=0;}if(sab_f<0){sab_f=4;}}
void bas_c_func(){if(bas_c>3){bas_c=0;}if(bas_c<0){bas_c=3;}}
void mid_c_func(){if(mid_c>3){mid_c=0;}if(mid_c<0){mid_c=3;}}
void treb_c_func(){if(treb_c>3){treb_c=0;}if(treb_c<0){treb_c=3;}}
void vol_out_func(){if(vol_out>15){vol_out=15;}if(vol_out<-79){vol_out=-79;}}
void lon_func(){if(lon>20){lon=20;}if(lon<0){lon=0;}}
void lon_f_func(){if(lon_f>3){lon_f=0;}if(lon_f<0){lon_f=3;}}
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 middle_func(){if(middle>20){middle=20;}if(middle<-20){middle=-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 cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(100);}
void to_Timer(){newPosition = myEnc.read()/4;}
void audio(){
   tda.setSetup_1(1,2,0); // default (1,2,0)
   tda.setSetup_2(sab_f,0,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
   tda.setLoudness_f(lon_f); // 250Hz 400Hz 800Hz Prohibition = int 0...3
   tda.setIn(in); // 0...2
   tda.setIn_gain(gain0,mute); // in_gain -- 0...20 = 0...20 dB, mute -- 0 default 
   tda.setVol(vol); // -79...+15 dB = int -79...15
   tda.setFront_1(rf); // -79...+15 dB = int -79...15
   tda.setFront_2(lf); // -79...+15 dB = int -79...15
   tda.setRear_1(rt); // -79...+15 dB = int -79...15
   tda.setRear_2(lt); // -79...+15 dB = int -79...15
   tda.setSub(sab); // -79...+15 dB = int -79...15
   tda.mix();
   tda.setBass_setup(bas_q,bas_c); // 0.5 1.0 1.5 2.0 --- int 0...3, 60Hz 80Hz 100Hz 120Hz --- int 0...3
   tda.setMiddle_setup(mid_q,mid_c); // 0.75 1.0 1.25 1.5 --- int 0...3, 500Hz 1kHz 1.5kHz 2.5kHz --- int 0...3
   tda.setTreble_setup(treb_q,treb_c); // 0.75 1.25  --- int 0...1, 7.5kHz 10kHz 12.5kHz 15kHz --- int 0...3
   tda.setBass_gain(bass); // --20 ... +20 dB = int -20 ... 20  
   tda.setMiddle_gain(middle); // --20 ... +20 dB = int -20 ... 20
   tda.setTreble_gain(treb); // --20 ... +20 dB = int -20 ... 20   
   tda.setLoudness_gain(lon); // 0 ... 20 dB = int 0 ... 20
  }

4 (2020-02-07 17:31:03 отредактировано motoman)

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

Собрал схему навесным монтажом, пока без процессора, скетч работает.
Получил вчера аудио процессор с переходной платой, распаял его, буду делать остальные платы с помощью ЛУТа.
Всего будет 2-3 платы в устройстве.

5

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

http://forum.rcl-radio.ru/uploads/images/2020/02/0ab251a33eaa62977d454589a49f1ff1.jpg

6

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

Тестирую сейчас работу схемы с ИК пультом. Вместо датчика VS1838 использовал временно ILMS5630. Как ИК пульт - смартфон Xiaomi Note 5.
Заметил некорректную работу - иногда кнопки пульта влево-вправо работают наоборот. При увеличении громкости она наоборот, может уменьшаться. Через секунд 5 всё приходит в норму. Т.е. после каждого нажатия кнопок пульта нужно делать паузу для корректной работы.
При изменении громкости, например, она может меняться на 2 единицы, а не по 1.

7

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

Посмотрите в мониторе порта какие коды кнопок посылает ИК датчик в Arduino.

Так же после:

 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;}// запрет нажатий не активных кнопок пульта

8

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

liman324 пишет:

Посмотрите в мониторе порта какие коды кнопок посылает ИК датчик в Arduino.

Так же после:

 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;}// запрет нажатий не активных кнопок пульта

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

9

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

Пробовал несколько ИК пультов - не все корректно работают.
В мониторе порта при нажатии одной и той же кнопки пульта бывает, что команды получаются разными.
Может, в этом причина нечеткой работы пульта?

10

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

Возможно что-то с ИК датчиком, помехи по питанию, нет светофильтра, причин много может быть.
Но у своего пульта я особо ни каких проблем не замечал, единственное что датчик не любит когда расстояние до пульта меньше 50 см, начинает ошибочно передавать код запроса.

11

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

Такую функцию, например, как LPF Phase, невозможно изменить с пульта, значение 180 только мигает при нажатии кнопки влево/вправо и промаргивает 0. Но если долго нажимать на кнопки, то значение все-таки изменяется. Как-будто у кнопок дребезг контактов.

12

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

Можно немного замедлить пульт:

if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок

заменить на

if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();delay(100);time=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок

13 (2020-02-18 00:59:02 отредактировано motoman)

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

liman324 пишет:

Можно немного замедлить пульт:

if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок

заменить на

if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();delay(100);time=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок

Не помогло при delay 100, сделал delay равным даже 500, пульт начал работать медленно. Но все равно, тот же параметр изменения фазы при установке на 180 меняется медленно на 0 и потом снова на 180. Как-будто происходит двойное нажатие кнопки пульта. Такое есть и при переборе параметров других функций в Menu 2. Например Bass Q изменяется с энкодера 0,5-1-1,5-2, а с пульта ИК - 0,5-1,5-2. Параметр 2 пропускается.
Вернул как было - убрал delay из строки.
Это практически единственный оставшийся баг в скетче, из бросающихся в глаза.

14

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

liman324 пишет:

Возможно что-то с ИК датчиком, помехи по питанию, нет светофильтра, причин много может быть.
Но у своего пульта я особо ни каких проблем не замечал, единственное что датчик не любит когда расстояние до пульта меньше 50 см, начинает ошибочно передавать код запроса.

Да, насчет расстояния точно - если его увеличивать, то приемник начинает точнее воспринимать команды.
А еще заметил, что мой ИК приемник ILMS5360 намного лучше воспринимает сигнал плоской, а не выпуклой
стороной корпуса. Перевернул его - и практически все сбои в работе пропали.
Вот и все решение вопроса!
http://forum.rcl-radio.ru/uploads/images/2020/02/9558acc8875246bf6cd6d5265ccf8186.jpeg

15

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

Если включить ILMS5360 по типовой схеме, то точность работы еще должна улучшиться.http://forum.rcl-radio.ru/uploads/images/2020/02/5ca1cc10a6e8eba5fcd542e87375a1b0.jpg

16

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

Не помогло при delay 100, сделал delay равным даже 500, пульт начал работать медленно. Но все равно, тот же параметр изменения фазы при установке на 180 меняется медленно на 0 и потом снова на 180. Как-будто происходит двойное нажатие кнопки пульта. Такое есть и при переборе параметров других функций в Menu 2. Например Bass Q изменяется с энкодера 0,5-1-1,5-2, а с пульта ИК - 0,5-1,5-2. Параметр 2 пропускается.
Вернул как было - убрал delay из строки.

Создайте отдельную функцию:
void cl2(){ir.value=0;delay(300);}

и там где нужна меньшая скорость переключения вместо cl1() укажите cl2()

Например:

   

     if(ir.value==IR_3){faza++;gr1=1;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){faza++;gr2=0;cl2();w2=1;faza_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){faza--;gr1=0;gr2=1;cl2();w2=1;faza_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){faza--;gr1=0;cl2();w2=1;faza_func();audio();}// кнопка <<<<<<  

17

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

Писал ранее - "можно ли ещё добавить несколько ячеек с профилями звука — изменение НЧ,СЧ,ВЧ, усиление, ячейки повесить на кнопки пульта 1,2,3.
Было бы актуально для различных по качеству источников звука (радио, CD)".
Ответили - Можно просто сделать, забить в переменные нужные значения и применять их с кнопки пульта:

if(ir.value==0xcode&&power==0){treb=10;bass=10;middle=10;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;}
Можно подробнее? В каком месте скетча внести дополнения?

18

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

motoman пишет:

Писал ранее - "можно ли ещё добавить несколько ячеек с профилями звука — изменение НЧ,СЧ,ВЧ, усиление, ячейки повесить на кнопки пульта 1,2,3.
Было бы актуально для различных по качеству источников звука (радио, CD)".
Ответили - Можно просто сделать, забить в переменные нужные значения и применять их с кнопки пульта:

if(ir.value==0xcode&&power==0){treb=10;bass=10;middle=10;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;}
Можно подробнее? В каком месте скетча внести дополнения?

liman324, что нужно сделать для добавления таких функций? Поподробнее, пожалуйста

19

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

После строки:

if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта

Добавьте три кнопки:

if(ir.value==0xcode1&&power==0){treb=10;bass=5;middle=0;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;}
if(ir.value==0xcode2&&power==0){treb=5;bass=3;middle=10;gr1=10;gr2=0;cl();time=millis();w=1;w2=1;}
if(ir.value==0xcode3&&power==0){treb=10;bass=10;middle=10;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;}

0xcode1 - код кнопки

treb=10;bass=5;middle=0; - установите уровни тембра для каждой кнопки

если устанавливать тембр при выборе входа, то можно отредактировать строку выбора входа:

if(digitalRead(3)==HIGH&&power==0&&menu2!=3&&mute==0){in++;;cl();time=millis();w=1;w2=1;www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN

например:

if(digitalRead(3)==HIGH&&power==0&&menu2!=3&&mute==0){in++;;cl();time=millis();w=1;w2=1;www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);
if(in==0){treb=10;bass=5;middle=0;}
if(in==1){treb=5;bass=15;middle=8;}
if(in==2){treb=4;bass=0;middle=10;}
audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN

это при нажатии на кнопку , и при нажатии на кнопку пульта, сделать аналогично:

if(ir.value==IR_5&&power==0&&menu2!=3&&mute==0){in++;sd1();www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN

заменить на

if(ir.value==IR_5&&power==0&&menu2!=3&&mute==0){in++;sd1();www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);
if(in==0){treb=10;bass=5;middle=0;}
if(in==1){treb=5;bass=15;middle=8;}
if(in==2){treb=4;bass=0;middle=10;}
audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN

20

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

liman324 пишет:

После строки:

if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта

Добавьте три кнопки:

if(ir.value==0xcode1&&power==0){treb=10;bass=5;middle=0;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;}
if(ir.value==0xcode2&&power==0){treb=5;bass=3;middle=10;gr1=10;gr2=0;cl();time=millis();w=1;w2=1;}
if(ir.value==0xcode3&&power==0){treb=10;bass=10;middle=10;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;}

0xcode1 - код кнопки

treb=10;bass=5;middle=0; - установите уровни тембра для каждой кнопки

если устанавливать тембр при выборе входа, то можно отредактировать строку выбора входа:

if(digitalRead(3)==HIGH&&power==0&&menu2!=3&&mute==0){in++;;cl();time=millis();w=1;w2=1;www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN

например:

if(digitalRead(3)==HIGH&&power==0&&menu2!=3&&mute==0){in++;;cl();time=millis();w=1;w2=1;www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);
if(in==0){treb=10;bass=5;middle=0;}
if(in==1){treb=5;bass=15;middle=8;}
if(in==2){treb=4;bass=0;middle=10;}
audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN

это при нажатии на кнопку , и при нажатии на кнопку пульта, сделать аналогично:

if(ir.value==IR_5&&power==0&&menu2!=3&&mute==0){in++;sd1();www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN

заменить на

if(ir.value==IR_5&&power==0&&menu2!=3&&mute==0){in++;sd1();www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);
if(in==0){treb=10;bass=5;middle=0;}
if(in==1){treb=5;bass=15;middle=8;}
if(in==2){treb=4;bass=0;middle=10;}
audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN

Спасибо, попробую!

21 (2020-02-21 18:54:39 отредактировано motoman)

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

motoman пишет:
liman324 пишет:

После строки:

if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта

Добавьте три кнопки:

if(ir.value==0xcode1&&power==0){treb=10;bass=5;middle=0;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;}
if(ir.value==0xcode2&&power==0){treb=5;bass=3;middle=10;gr1=10;gr2=0;cl();time=millis();w=1;w2=1;}
if(ir.value==0xcode3&&power==0){treb=10;bass=10;middle=10;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;}

0xcode1 - код кнопки

treb=10;bass=5;middle=0; - установите уровни тембра для каждой кнопки

если устанавливать тембр при выборе входа, то можно отредактировать строку выбора входа:

if(digitalRead(3)==HIGH&&power==0&&menu2!=3&&mute==0){in++;;cl();time=millis();w=1;w2=1;www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN

например:

if(digitalRead(3)==HIGH&&power==0&&menu2!=3&&mute==0){in++;;cl();time=millis();w=1;w2=1;www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);
if(in==0){treb=10;bass=5;middle=0;}
if(in==1){treb=5;bass=15;middle=8;}
if(in==2){treb=4;bass=0;middle=10;}
audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN

это при нажатии на кнопку , и при нажатии на кнопку пульта, сделать аналогично:

if(ir.value==IR_5&&power==0&&menu2!=3&&mute==0){in++;sd1();www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN

заменить на

if(ir.value==IR_5&&power==0&&menu2!=3&&mute==0){in++;sd1();www=1;if(in>2){in=0;};lcd.setCursor(0,0);lcd.print("    INPUT ");lcd.print(in+1);
if(in==0){treb=10;bass=5;middle=0;}
if(in==1){treb=5;bass=15;middle=8;}
if(in==2){treb=4;bass=0;middle=10;}
audio();delay(2000);}// КНОПКА ВЫБОРА ВХОДА IN

Спасибо, попробую!

Arduino: 1.8.5 (Windows 7), Плата:"Arduino Nano, ATmega328P"

C:\Users\126\Documents\Arduino\sketch_dec31a\sketch_dec31a.ino: In function 'void loop()':

sketch_dec31a:74: error: unable to find numeric literal operator 'operator""ode1'

     if(ir.value==0xcode1&&power==0){treb=10;bass=5;middle=0;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;}

                  ^

sketch_dec31a:75: error: unable to find numeric literal operator 'operator""ode2'

     if(ir.value==0xcode2&&power==0){treb=5;bass=3;middle=10;gr1=10;gr2=0;cl();time=millis();w=1;w2=1;}

                  ^

sketch_dec31a:76: error: unable to find numeric literal operator 'operator""ode3'

     if(ir.value==0xcode3&&power==0){treb=10;bass=10;middle=10;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;}

                  ^

exit status 1
unable to find numeric literal operator 'operator""ode1'

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Такая вот ошибка при компилировании.
Из-за того, что не указал реальные коды кнопок?

22

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

0xcode1 2 и 3 - надо заменить на код кнопок Вашего пульта

23

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

liman324 пишет:

0xcode1 2 и 3 - надо заменить на код кнопок Вашего пульта

Все получилось, спасибо! Я просто новичок в Ардуино. Буду скоро тестировать схему в железе.

24

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

liman324 - а какой 4-х строчный дисплей используется, как у вас на фото под статьей?

25

Re: BD37534FV - Sound Processor with Built-in 3-band Equalizer

LCD2004 с I2C модулем