76

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

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

77

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

28 28 должны стоять 5,6 нФ, а на 2 выводе электролит, все остальные номиналы не важно.

78

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

здравствуйте , установил 5,6 нФ , на 2 ноге электролит и все равно не работает

79

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Подтягивающие резисторы подключили?

80

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Да, и с ними и без не работает , с Ардуино нано и мега ведет себя одинаково - в сканере просто перечисляются все адреса и приписка о неизвестном устройстве

81

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Как правило запуск TDA7439 всегда происходил без проблем у многих пользователей форума судя по их сообщениям. Возможно есть ошибки в печатном монтаже, замыкание шины на массу или другие участки схемы. Я не вижу причин чтобы TDA7439 не запускалась. Бывают трудности у пользователей форума, как правило нет звука, но I2C адрес читался всегда.

82

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Нужно ли обязательно подключать землю Ардуино и тда, пробовал и так и так

83

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Обязательно нужно подключать.

84

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

А DIGGND тоже тоже на землю кидается ?

85 (2024-03-27 17:58:45 отредактировано Vitlych2019)

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Сопротивление между DIGGND и SDA 3кОм

86

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

А DIGGND тоже тоже на землю кидается ?

Да

87

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

А в какой последовательности лучше подключать, если раздельное питание р сначала Ардуино, а потом tda?

88

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

На TDA подаете 9В с первого источника, его землю соединяете с землей адруино, ардуино питается от другого источника. Хотя можно их питать от одного источника 9В, подав 9 В на вход vin Arduino. Аналоговая земля tda и цифровая как правило объединяют через резистор 2,2 - 10 Ом, но можно просто их замкнуть.

89

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Подскажите ошибку ?- при загрузке скетча выскакивает меню и экран выключен, при вкл power больше так не чудит и лишнее не выскакивает. Скетч переделал под свои хотелки.

#define IR_1 0xFF18E7       // Кнопка вверх
#define IR_2 0xFF4AB5       // Кнопка вниз
#define IR_3 0xFF5AA5       // Кнопка >
#define IR_4 0xFF10EF       // Кнопка <
#define IR_5 0xFF38C7       // Кнопка IN
#define IR_6 0xFFB04F       // Кнопка POWER
#define IR_7 0xFF6897       // Кнопка MUTE

#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
#include <Wire.h>
#include <TDA7419.h>
#include <IRremote.h>
#include <Encoder.h>
#include <MsTimer2.h>

Encoder myEnc(3,2);        //CLK, DT
TDA7419 tda;
LiquidCrystal_I2C lcd(0x27,16,2);
IRrecv irrecv(12);          //  D12 = IR
decode_results ir;

int menu,menu2,vol,bas,w,w1,vol_d,bass_d,treb,treble_d,middle,middle_d,z,in,gain0,gain1,gain2,gain3,gain_d,set;
int lon, lon_f, lon_d,out,vol_out,rf,lf,rt,lt,sab,treb_c,mid_c,bas_c,sab_f,mute = 0,vol_ram;
unsigned long time, oldPosition  = -999,times;
byte a1[8]={0b00000,0b11011,0b11011,0b11011,0b11011,0b11011,0b11011,0b00000};
byte a2[8]={0b00000,0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b00000};
byte a3[ 8 ] = { 0b00000, 0b00000, 0b00000, 0b11011, 0b11011, 0b00000, 0b00000, 0b00000};
byte a4[ 8 ] = { 0b00000, 0b00001, 0b00011, 0b01111, 0b01111, 0b00011, 0b00001, 0b00000};
byte a5[ 8 ] = { 0b00000, 0b00000, 0b01000, 0b00100, 0b00100, 0b01000, 0b00000, 0b00000};
byte tone1[ 8 ] = { 0b11100, 0b11110, 0b01000, 0b00100, 0b00010, 0b01110, 0b11110, 0b01100};
byte tone2[ 8 ] = { 0b00010, 0b00011, 0b00010, 0b01110, 0b11110, 0b01100, 0b00000, 0b00000};
byte tone3[ 8 ] = { 0b01000, 0b11100, 0b11101, 0b10100, 0b00100, 0b01001, 0b10000, 0b00000};
byte power=0,gr1,gr2,w2=1;

void setup() {
//Serial.begin(9600);            //  раскоментировать при настройке пульта 
lcd.init();                      // инициализация LCD дисплея SDA – A4, SCL – A5
lcd.createChar(0,a1);
lcd.createChar(1,a2);
lcd.createChar(2,a3);
lcd.createChar(3,a4);
lcd.createChar(4,a5);
lcd.createChar(5,tone1);
lcd.createChar(6,tone2);
lcd.createChar(7,tone3);
irrecv.enableIRIn();             // запускаем модуль IR
Wire.begin();
lcd.clear();
pinMode(A1,INPUT_PULLUP);        // меню
pinMode(A0,INPUT_PULLUP);        // Set
pinMode(11,INPUT_PULLUP);        // Power
pinMode(A2,INPUT_PULLUP);        // плюс
pinMode(A3,INPUT_PULLUP);        // минус
pinMode(9,INPUT_PULLUP);         // оптрон защита АС
pinMode(10,OUTPUT);              // реле
pinMode(13,OUTPUT);              // выход управления ST-BY
pinMode(4,INPUT_PULLUP);         // кнопка энкодера 
pinMode(8,INPUT_PULLUP);         // mute
   if(EEPROM.read(200)!=0){for(int i=0;i<201;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении
   vol = EEPROM.read(0);treb = EEPROM.read(1)-15;middle = EEPROM.read(3)-15;bas = EEPROM.read(3)-15;
   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);
   MsTimer2::set(1, to_Timer);MsTimer2::start();
   audio();
}
long newPosition;

void to_Timer(){ //функция таймера
newPosition = myEnc.read()/4;
}
void loop() {
//-------------------------------------------------------------------- IR -----------------------------------------------------------------------------------------------------
//if( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();times=millis();w=1;} // IR приемник,в мониторе порта отображаются коды кнопок
if(ir.value==0){gr1=0;gr2=0;}// запрет нажатий не активных кнопок пульта
if(ir.value==IR_6 && power==0)
{power=1;digitalWrite(13,LOW);digitalWrite(10,LOW);cl();menu=100;lcd.setCursor(0,0);lcd.print(F("    POWER OFF   "));delay(1000);lcd.noBacklight();cl();}
if(ir.value==IR_6 && power==1)
{power=0;cl();w=1;menu=0;digitalWrite(13,HIGH);lcd.setCursor(0,0);lcd.print(F("    POWER ON    "));delay(2000);cl();digitalWrite(10,HIGH);cl();}
if(ir.value==IR_2&& mute==0){menu2=100;menu++;cl();time=millis();w1=1;if(menu>4){menu=0;}}                  // меню кнопка пульта вверх
if(ir.value==IR_1&& mute==0){menu2=100;menu--;cl();time=millis();w1=1;if(menu>0){menu=4;}}                  // меню кнопка пульта вниз
if(ir.value==IR_7&& mute==0){mute++;w=1;if(mute>1){mute=0;}}                                                // режим mute пульта
//------------------------------------------------------------------- power ---------------------------------------------------------------------------------------------------
if(digitalRead(9)==LOW)
{digitalWrite(10,LOW);digitalWrite(13,LOW);menu=100;menu2=100;lcd.clear();lcd.setCursor(0,0);lcd.print(F("   Warning!!!   "));delay(500);}
if(digitalRead(11)==LOW && power==0)
{power=1;cl();myEnc.write(0);digitalWrite(10,LOW);digitalWrite(13,LOW);menu=100;menu2=100;lcd.setCursor(0,0);lcd.print("    POWER OFF   ");delay(1000);lcd.noBacklight();cl();}
if(digitalRead(11)==LOW && power==1)
{power=0;cl();myEnc.write(0);digitalWrite(13,HIGH);w=1;menu=0;menu2=100;lcd.backlight();lcd.setCursor(0,0);lcd.print("    POWER ON    ");delay(2000);digitalWrite(10,HIGH);cl();}
if(power==0){
  if(digitalRead(4)==LOW){menu2=100;menu++;cl();myEnc.write(0);time=millis();w1=1;if(menu>3){menu=0;}}   // основное меню,кнопка энкодера
  if(digitalRead(A1)==LOW){menu=100;menu2++;cl();myEnc.write(0);time=millis();w1=1;if(menu2>6){menu2=0;}} // меню настроек
  if(digitalRead(8)==LOW){mute++;w=1;cl();time=millis();if(mute>1){mute=0;}}
    }
if(power==0){digitalWrite(13,LOW);}else{digitalWrite(13,HIGH);} 
//--------------------------------------------------------------- Volume -80 ... 0 дБ ----------------------------------------------------------------------------------------
if(menu==0){
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <<<<<<
if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol=vol+newPosition;myEnc.write(0);newPosition=0;audio();lcd.clear();time=millis();w1=1;vol_func();}
    if(w==1){audio();cl();time=millis();w=0;w1=1;}
    if(mute==1)
    {lcd.setCursor(0,0);lcd.print("Volume "); lcd.print( "0");lcd.setCursor( 12, 0);lcd.print("MUTE");
    lcd.setCursor( 1, 1); lcd.print("x"); lcd.setCursor( 0, 1);lcd.write(( uint8_t ) 3);
     for ( z = 3 ; z <= 15; z++ ) { lcd.setCursor( z , 1);lcd.write(( uint8_t ) 2);}
     }
    if(mute==0)
    {vol_d=map(vol,0,80,0,16);
    lcd.setCursor(0,0);lcd.print("Volume   "); lcd.print(-vol/5);lcd.setCursor(13,0);lcd.print("dB");
    lcd.setCursor( 1, 1);lcd.write(( uint8_t ) 4);lcd.setCursor( 0, 1);lcd.write(( uint8_t ) 3);
    if(vol_d>0){
    for(z=2 ; z <= vol_d; z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}
    for(z = vol_d ; z<=16; z++){lcd.setCursor(z+2,1);lcd.write((uint8_t)2);}}}
    }
//----------------------------------------------------------- индикация, тембр ВЧ  -15...15 дБ -------------------------------------------------------------------------------   
if(menu==1){
     if(ir.value==IR_3){treb++;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;treb_func();audio();}// кнопка >
     if(ir.value==0xFFFFFFFF and gr1==1){treb++;gr2=0;cl();times=millis();w=1;w2=1;treb_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){treb--;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;treb_func();audio();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){treb--;gr1=0;cl();times=millis();w=1;w2=1;treb_func();audio();}// кнопка <<<<<<
if (newPosition != oldPosition) {
    oldPosition = newPosition;
    treb=treb+newPosition;myEnc.write(0);newPosition=0;audio();lcd.clear();time=millis();w1=1;treb_func();}
    if(w==1){audio();cl();time=millis();w1=1;w=0;}
    lcd.setCursor(0,0);lcd.print("Treble   ");
    lcd.print(treb);lcd.setCursor(13,0);lcd.print("dB");treble_d=treb+15;
    lcd.setCursor( 0, 1);lcd.write(( uint8_t ) 6);
    treble_d = treb / 2 + 8;
    if ( treble_d >= 0 ) {
    for (z = 2 ; z <= treble_d; z++ ) {lcd.setCursor ( z, 1 );lcd.write ( ( uint8_t ) 0 ) ;}
    for ( z = treble_d ; z <= 15; z++ ) {lcd.setCursor ( z + 2, 1 );lcd.write(( uint8_t ) 2);}}
    }
//-------------------------------------------------------------- индикация, тембр CЧ  -15...15 дБ ----------------------------------------------------------------------------
if(menu==2){
if (newPosition != oldPosition) {
    oldPosition = newPosition;
    middle=middle+newPosition;myEnc.write(0);newPosition=0;audio();lcd.clear();time=millis();w1=1;if(middle>15){middle=15;}if(middle<-15){middle=-15;}}
    if(w==1){audio();cl();time=millis();w1=1;w=0;}
    lcd.setCursor(0,0);lcd.print("Middle   ");
    lcd.print(middle);lcd.setCursor(13,0);lcd.print("dB");middle_d=middle+15;
    lcd.setCursor( 0, 1);lcd.write(( uint8_t ) 7);
    middle_d=middle / 2+8;
    if(middle_d>0){
    for(z=2 ; z <= middle_d; z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}
    for(z = middle_d ; z<=15; z++){lcd.setCursor(z+2,1);lcd.write((uint8_t)2);}}     
    }
//------------------------------------------------------------------ индикация, тембр НЧ -15...15 дБ -------------------------------------------------------------------------
if(menu==3){
     if(ir.value==IR_3){bas++;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;bass_func();audio();}// кнопка >
     if(ir.value==0xFFFFFFFF and gr1==1){bas++;gr2=0;cl();times=millis();w=1;w2=1;bass_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){bas--;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;bass_func();audio();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){bas--;gr1=0;cl();times=millis();w=1;w2=1;bass_func();audio();}// кнопка <<<<<<
if (newPosition != oldPosition) {
    oldPosition = newPosition; 
    bas=bas+newPosition;myEnc.write(0);newPosition=0;audio();lcd.clear();time=millis();w1=1;bass_func();}
    lcd.setCursor(0,0);lcd.print("Bass      ");
    lcd.print(bas);lcd.setCursor(13,0);lcd.print("dB");bass_d=bas+15;
    lcd.setCursor( 0, 1);lcd.write(( uint8_t ) 5);
    bass_d=bas / 2+8;
    if(bass_d>0){
    for(z=2 ; z <= bass_d; z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}
    for(z = bass_d ; z<=15; z++){lcd.setCursor(z+2,1);lcd.write((uint8_t)2);}}     
    }
//------------------------------------------------------------------- вход 1...3 + предусилитель 0...15 дБ -------------------------------------------------------------------
if(menu2==0){
   if(digitalRead(A0)==LOW){in++;w=1;if(in>3){in=1;}}
   if(in==1){gain0=gain1;}if(in==2){gain0=gain2;}if(in==3){gain0=gain3;}
   if(digitalRead(A2)==LOW){gain0++;w=1;if(gain0>15){gain0=15;}}
   if(digitalRead(A3)==LOW){gain0--;w=1;if(gain0<0){gain0=0;}}
   if(w==1){audio();cl();time=millis();w1=1;w=0;}
   lcd.setCursor(0,0);lcd.print(F("Input: "));lcd.print(in);gain_d=gain0;
   if(gain_d>=0){for(z=0;z<=gain_d;z++){lcd.setCursor(z/2,1);lcd.write((uint8_t)0);}}
   if((gain_d)%2==0){lcd.setCursor(z/2,1);lcd.write((uint8_t)1);}
   if(in==1){gain1=gain0;}if(in==2){gain2=gain0;}if(in==3){gain3=gain0;}
   lcd.setCursor(11,1);lcd.print(gain0);lcd.print(F(" dB  "));}       
//--------------------------------------------------------------------------- loudness ---------------------------------------------------------------------------------------
if(menu2==1){ 
if(digitalRead(A0)==LOW){lon_f++;w=1;if(lon_f>3){lon_f=0;}}
if(digitalRead(A2)==LOW){lon++;w=1;if(lon>15){lon=15;}}
if(digitalRead(A3)==LOW){lon--;w=1;if(lon<0){lon=0;}}
lcd.setCursor(0,0);lcd.print(F("Loudness: "));
   switch(lon_f)
   {case 0: lcd.print(F("FLAT"));break;
   case 1: lcd.print(F("400Hz"));break;
   case 2: lcd.print(F("800Hz"));break;
   case 3: lcd.print(F("2400Hz"));break;}
   lcd.setCursor(0,1);
   if(lon_d>=0){for(z=0;z<=lon_d;z++){lcd.setCursor(z/2,1);lcd.write((uint8_t)0);}}
   if((lon_d)%2==0){lcd.setCursor(z/2,1);lcd.write((uint8_t)1);}
   lcd.setCursor(9,1);lcd.print(F("-"));lcd.print(lon);lcd.print(F(" dB  "));}
//----------------------------------------------------------------------------- out ------------------------------------------------------------------------------------------
if(menu2==2){ 
if(digitalRead(A0)==LOW){out++;w=1;if(out>4){out=0;}}
    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(digitalRead(A2)==LOW){vol_out++;w=1;if(vol_out>15){vol_out=15;}}
if(digitalRead(A3)==LOW){vol_out--;w=1;if(vol_out<0){vol_out=0;}}
   lcd.setCursor(0,0);lcd.print(F("Volume OUT"));
   lcd.setCursor(0,1);
   switch(out){
   case 0:rf=vol_out;lcd.print(F("RF:  +"));lcd.print(rf);break;
   case 1:lf=vol_out;lcd.print(F("LF:  +"));lcd.print(lf);break;
   case 2:rt=vol_out;lcd.print(F("RT:  +"));lcd.print(rt);break;
   case 3:lt=vol_out;lcd.print(F("LT:  +"));lcd.print(lt);break;
   case 4:sab=vol_out;lcd.print(F("SUBW:  +"));lcd.print(sab);break;}
   lcd.print(F(" dB      "));if(w==1){audio();cl();time=millis();w1=1;w=0;}}         
//---------------------------------------------------------------------------treble center -----------------------------------------------------------------------------------
if(menu2==3){
if(digitalRead(A2)==LOW){treb_c++;w=1;if(treb_c>3){treb_c=0;}}
if(digitalRead(A3)==LOW){treb_c--;w=1;if(treb_c<0){treb_c=0;}}
if(w==1){audio();cl();time=millis();w1=1;w=0;}
  lcd.setCursor(0,0);lcd.print(F("Treble Center "));
  lcd.setCursor(1,6);
  switch(treb_c){
  case 0: lcd.print(F("10.0 kHz"));break;
  case 1: lcd.print(F("12.5 kHz"));break;
  case 2: lcd.print(F("15.0 kHz"));break;
  case 3: lcd.print(F("17.5 kHz"));break;}} 
//---------------------------------------------------------------------------- middle center ---------------------------------------------------------------------------------
if(menu2==4){
if(digitalRead(A2)==LOW){mid_c++;w=1;if(mid_c>3){mid_c=0;}}
if(digitalRead(A3)==LOW){mid_c--;w=1;if(mid_c<0){mid_c=0;}}
if(w==1){audio();cl();time=millis();w1=1;w=0;}
  lcd.setCursor(0,0);lcd.print(F("Middle Center "));
  lcd.setCursor(1,6);
  switch(mid_c){
  case 0: lcd.print(F("0.5 kHz"));break;
  case 1: lcd.print(F("1.0 kHz"));break;
  case 2: lcd.print(F("1.5 kHz"));break;
  case 3: lcd.print(F("2.5 kHz"));break;}}
//----------------------------------------------------------------------------- bass center ----------------------------------------------------------------------------------
if(menu2==5){
if(digitalRead(A2)==LOW){bas_c++;w=1;if(bas_c>3){bas_c=0;}}
if(digitalRead(A3)==LOW){bas_c--;w=1;if(bas_c<0){bas_c=0;}}
if(w==1){audio();cl();time=millis();w1=1;w=0;}
  lcd.setCursor(0,0);lcd.print(F("Bass Center "));
  lcd.setCursor(1,6);
  switch(bas_c){
  case 0: lcd.print(F("60 Hz"));break;
  case 1: lcd.print(F("80 Hz"));break;
  case 2: lcd.print(F("100 Hz"));break;
  case 3: lcd.print(F("200 Hz"));break;}}
//-------------------------------------------------------------------------------- subw --------------------------------------------------------------------------------------
if(menu2==6){
if(digitalRead(A2)==LOW){sab_f++;w=1;if(sab_f>3){sab_f=0;}}
if(digitalRead(A3)==LOW){sab_f--;w=1;if(sab_f<0){sab_f=0;}}
if(w==1){audio();cl();time=millis();w1=1;w=0;}
  lcd.setCursor(0,0);lcd.print(F("Subwoofer Freq."));
  lcd.setCursor(1,6);
  switch(sab_f){
  case 0: lcd.print(F("FLAT"));break;
  case 1: lcd.print(F("80 Hz"));break;
  case 2: lcd.print(F("120 Hz"));break;
  case 3: lcd.print(F("160 Hz"));break;}}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Serial.println(time);

if(millis()-time>10000 && w1==1 && power==0 && mute==0){
     EEPROM.update(0,vol);EEPROM.update(1,treb+15);EEPROM.update(2,middle+15);EEPROM.update(3,bas+15);
     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);
    menu2=100; menu=0;w1=0;cl();}           
}
void treb_func(){if(treb>15){treb=15;}if(treb<-15){treb=-15;}}
void bass_func(){if(bas>15){bas=15;}if(bas<-15){bas=-15;}} 
void vol_func(){if(vol>80){vol=80;}if(vol<0){vol=0;}}
void cl(){delay(300);lcd.clear();}
void audio(){
tda.setInput(in,gain0,0);    //вх1=1, вх2=2, вх3=3
tda.setInput2(0,0,0);   // не используется
tda.setAtt_loudness(lon,lon_f,0,0);
tda.setSoft(mute,0,0,0,0);//mute off (не менять)
tda.setVolume(vol-79,0);   // общая громкость от 0 до 79 макс
tda.setAtt_LF(64+lf,0);   // гром. лк фронт
tda.setAtt_RF(64+rf,0);   // гром. пк фронт
tda.setAtt_LT(64+lt,0);   // гром. лк тыл
tda.setAtt_RT(64+rt,0);   // гром. пк тыл
tda.setAtt_SUB(64+sab,0);  // гром. савбуфер
tda.setAtt_Mix(79,0);   // не использует
tda.setFilter_Treble(treb,treb_c,0);
tda.setFilter_Middle(middle,0,0);
tda.setFilter_Bass(bas,0,0);
tda.setSub_M_B(sab_f,mid_c,bas_c,0,0);
tda.setMix_Gain_Eff(1,0,0,0,0); // не используется
tda.setSpektor(0,0,1,0,1,0,0);
}

90

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Попробуйте так

int menu,menu2,vol,bas,w,w1,vol_d,bass_d,treb,treble_d,middle,middle_d,z,in,gain0,gain1,gain2,gain3,gain_d,set;

заменить на

int menu=100,menu2,vol,bas,w,w1,vol_d,bass_d,treb,treble_d,middle,middle_d,z,in,gain0,gain1,gain2,gain3,gain_d,set;

91

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Благодарю, заработало

92

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Гляньте скетч, есть ошибки ? малоопытен в программировании.
#define IR_1 0xFF18E7       // Кнопка вверх
#define IR_2 0xFF4AB5       // Кнопка вниз
#define IR_3 0xFF5AA5       // Кнопка >
#define IR_4 0xFF10EF       // Кнопка <
#define IR_5 0xFF38C7       // Кнопка IN
#define IR_6 0xFFB04F       // Кнопка POWER
#define IR_7 0xFF6897       // Кнопка MUTE
#define Power 11            // Power
#define Menu  A1            // меню
#define Set   A0            // Set
#define plus  A2            // плюс
#define minus A3            // минус
#define Enc   4             // кнопка энкодера
#define Mute  8             // mute
#define st_by 13            // выход управления в режим ST-BY
#define guard 9             // оптрон защиты АС
#define relay 10            // реле защиты AC
       
#include <LiquidCrystal_I2C.h>
#include <EEPROM.h>
#include <Wire.h>
#include <TDA7419.h>
#include <IRremote.h>
#include <Encoder.h>
#include <MsTimer2.h>
#include <microDS18B20.h>

MicroDS18B20<5> sensor1;                                                 // Датчики температуры на D5 и D6
MicroDS18B20<6> sensor2;
Encoder myEnc(3,2);        // CLK, DT
TDA7419 tda;
LiquidCrystal_I2C lcd(0x27,16,2);
IRrecv irrecv(12);         // D12 = IR
decode_results ir;

int menu,menu2 = 100,vol,bas,w,w1,vol_d,bass_d,treb,treble_d,middle,middle_d,z,in,gain0,gain1,gain2,gain3,gain_d,set;
int lon, lon_f, lon_d,out,vol_out,rf,lf,rt,lt,sab,treb_c,mid_c,bas_c,sab_f,mute = 0,vol_ram;
unsigned long time, oldPosition  = -999,times,Timer;
byte a1[8]={0b00000,0b11011,0b11011,0b11011,0b11011,0b11011,0b11011,0b00000};
byte a2[8]={0b00000,0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b00000};
byte a3[8]={ 0b00000, 0b00000, 0b00000, 0b11011, 0b11011, 0b00000, 0b00000, 0b00000};
byte a4[8]={ 0b00000, 0b00001, 0b00011, 0b01111, 0b01111, 0b00011, 0b00001, 0b00000};
byte a5[8]={ 0b00000, 0b00000, 0b01000, 0b00100, 0b00100, 0b01000, 0b00000, 0b00000};
byte tone1[ 8 ] = { 0b11100, 0b11110, 0b01000, 0b00100, 0b00010, 0b01110, 0b11110, 0b01100};
byte tone2[ 8 ] = { 0b00010, 0b00011, 0b00010, 0b01110, 0b11110, 0b01100, 0b00000, 0b00000};
byte tone3[ 8 ] = { 0b01000, 0b11100, 0b11101, 0b10100, 0b00100, 0b01001, 0b10000, 0b00000};
byte gr1,gr2,w2=1;
bool flag = false, power;
float temperature1,temperature2,temp = 80;                                                   

void setup() {
//Serial.begin(9600);            // раскоментировать при настройке пульта 
lcd.init();                      // инициализация LCD дисплея SDA – A4, SCL – A5
lcd.createChar(0,a1);
lcd.createChar(1,a2);
lcd.createChar(2,a3);
lcd.createChar(3,a4);
lcd.createChar(4,a5);
lcd.createChar(5,tone1);
lcd.createChar(6,tone2);
lcd.createChar(7,tone3);
irrecv.enableIRIn();             // запускаем модуль IR
Wire.begin();
pinMode(Menu,INPUT_PULLUP);       
pinMode(Set,INPUT_PULLUP);       
pinMode(Power,INPUT_PULLUP);       
pinMode(plus,INPUT_PULLUP);       
pinMode(minus,INPUT_PULLUP);       
pinMode(guard,INPUT_PULLUP);         
pinMode(relay,OUTPUT);             
pinMode(st_by,OUTPUT);             
pinMode(Enc,INPUT_PULLUP);         
pinMode(Mute,INPUT_PULLUP);         
   if(EEPROM.read(200)!=0){for(int i=0;i<201;i++){EEPROM.update(i,0);}} // очистка памяти при первом включении
   vol = EEPROM.read(0);treb = EEPROM.read(1)-15;bas = EEPROM.read(3)-15;
   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);
   MsTimer2::set(1, to_Timer);MsTimer2::start();
   audio();
   lcd.backlight();
   
}
long newPosition;

void to_Timer(){ //функция таймера
newPosition = myEnc.read()/4;
}
void loop() {
//-------------------------------------------------------------------- IR --------------------------------------------------------------------------------------------------
//if( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);irrecv.resume();times=millis();w=1;} // IR приемник,в мониторе порта отображаются коды кнопок
if(ir.value==0){gr1=0;gr2=0;} // запрет нажатий не активных кнопок пульта }
if(digitalRead(guard)==LOW && !flag)
{flag = true;digitalWrite(10,LOW);digitalWrite(13,LOW);menu=100;menu2=100;lcd.clear();lcd.setCursor(0,0);lcd.print(F("   Warning!!!   "));delay(100);}   
if(power==0){digitalWrite(st_by,HIGH);}else{digitalWrite(st_by,LOW);}
if((digitalRead(Power)==LOW || ir.value==IR_6) && power==0)
{power=1;cl();myEnc.write(0);digitalWrite(st_by,LOW);digitalWrite(relay,LOW);menu=100;menu2=100;lcd.setCursor(0,0);lcd.print("    POWER OFF   ");delay(1000);lcd.noBacklight();cl();}
if((digitalRead(Power)==LOW || ir.value==IR_6) && power==1)
{power=0;cl();myEnc.write(0);digitalWrite(st_by,HIGH);w=1;menu=0;menu2=100;lcd.backlight();lcd.setCursor(0,0);lcd.print("    POWER ON    ");delay(2000);digitalWrite(relay,HIGH);cl();}
if(power==0){
  if(digitalRead(Enc)==LOW&& mute==0){menu2=100;menu++;cl();myEnc.write(0);time=millis();w1=1;if(menu>2){menu=0;}}        // основное меню,кнопка энкодера
  if(digitalRead(Menu)==LOW&& mute==0){menu=100;menu2++;cl();myEnc.write(0);time=millis();w1=1;if(menu2>6){menu2=0;}}     // меню настроек
  if(digitalRead(Mute)==LOW){mute++;w=1;time=millis();if(mute>1){mute=0;}}
  if(ir.value==IR_2&& mute==0){menu2=100;menu++;cl();time=millis();w1=1;if(menu>2){menu=0;}}                  // меню кнопка пульта вверх
  if(ir.value==IR_1&& mute==0){menu2=100;menu--;cl();time=millis();w1=1;if(menu<0){menu=0;}}                  // меню кнопка пульта вниз
  if(ir.value==IR_7&& mute==0){mute++;w=1;if(mute>1){mute=0;}}                                                // режим mute пульта
    }
if(power==0){digitalWrite(st_by,HIGH);}else{digitalWrite(st_by,LOW);}   
//--------------------------------------------------------------- Volume -80 ... 0 дБ ----------------------------------------------------------------------------------------
if(menu==0){
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl();times=millis();w=1;w2=1;vol_func();audio();}// кнопка <<<<<<
if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol=vol+newPosition;myEnc.write(0);newPosition=0;audio();lcd.clear();time=millis();w1=1;vol_func();}
    if(w==1){audio();cl();time=millis();w=0;w1=1;}
if(mute==1)
    {lcd.setCursor(0,0);lcd.print("Volume "); lcd.print( "0");lcd.setCursor( 12, 0);lcd.print("MUTE");
    lcd.setCursor( 1, 1); lcd.print("x"); lcd.setCursor( 0, 1);lcd.write(( uint8_t ) 3);
     for ( z = 3 ; z <= 15; z++ ) { lcd.setCursor( z , 1);lcd.write(( uint8_t )2);}
     }
    else
    {w=0;vol_d=map(vol,0,80,0,15);
    lcd.setCursor(0,0);lcd.print("Volume  "); lcd.print(-vol/5);lcd.setCursor(13,0);lcd.print("dB");
    lcd.setCursor( 1, 1);lcd.write(( uint8_t ) 4);lcd.setCursor( 0, 1);lcd.write(( uint8_t ) 3);
    if(vol_d>0){
    for(z=2 ; z <= vol_d; z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}
    for(z = vol_d ; z<=16; z++){lcd.setCursor(z+2,1);lcd.write((uint8_t)2);}}}
    }
//----------------------------------------------------------- индикация, тембр ВЧ  -15...15 дБ -------------------------------------------------------------------------------   
if(menu==1){
     if(ir.value==IR_3){treb++;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;treb_func();audio();}// кнопка >
     if(ir.value==0xFFFFFFFF and gr1==1){treb++;gr2=0;cl();times=millis();w=1;w2=1;treb_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){treb--;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;treb_func();audio();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){treb--;gr1=0;cl();times=millis();w=1;w2=1;treb_func();audio();}// кнопка <<<<<<
if (newPosition != oldPosition) {
    oldPosition = newPosition;
    treb=treb+newPosition;myEnc.write(0);newPosition=0;audio();lcd.clear();time=millis();w1=1;treb_func();}
    if(w==1){audio();cl();time=millis();w1=1;w=0;}
    lcd.setCursor(0,0);lcd.print("Treble  ");
    lcd.print(treb);lcd.setCursor(13,0);lcd.print("dB");treble_d=treb+15;
    lcd.setCursor( 0, 1);lcd.write(( uint8_t ) 6);
    treble_d = treb / 2 + 8;
    if ( treble_d >= 0 ) {
    for (z = 2 ; z <= treble_d; z++ ) {lcd.setCursor ( z, 1 );lcd.write ( ( uint8_t ) 0 ) ;}
    for ( z = treble_d ; z <= 15; z++ ) {lcd.setCursor ( z + 2, 1 );lcd.write(( uint8_t ) 2);}}
    }
//----------------------------------------------------------- индикация, тембр НЧ -15...15 дБ ---------------------------------------------------------------------------------
if(menu==2){
     if(ir.value==IR_3){bas++;gr1=1;gr2=0;cl();times=millis();w=1;w2=1;bass_func();audio();}// кнопка >
     if(ir.value==0xFFFFFFFF and gr1==1){bas++;gr2=0;cl();times=millis();w=1;w2=1;bass_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){bas--;gr1=0;gr2=1;cl();times=millis();w=1;w2=1;bass_func();audio();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){bas--;gr1=0;cl();times=millis();w=1;w2=1;bass_func();audio();}// кнопка <<<<<<
if (newPosition != oldPosition) {
    oldPosition = newPosition; 
    bas=bas+newPosition;myEnc.write(0);newPosition=0;audio();lcd.clear();time=millis();w1=1;bass_func();}
    if(w==1){audio();cl();time=millis();w1=1;w=0;}
    lcd.setCursor(0,0);lcd.print("Bass    ");
    lcd.print(bas);lcd.setCursor(13,0);lcd.print("dB");bass_d=bas+15;
    lcd.setCursor( 0, 1);lcd.write(( uint8_t ) 5);
    bass_d=bas / 2+8;
    if(bass_d>0){
    for(z=2 ; z <= bass_d; z++){lcd.setCursor(z,1);lcd.write((uint8_t)0);}
    for(z = bass_d ; z<=15; z++){lcd.setCursor(z+2,1);lcd.write((uint8_t)2);}}     
    }
//------------------------------------------------------------- вход 1...3 + предусилитель 0...15 дБ --------------------------------------------------------------------------
if(menu2==0){
if(digitalRead(Set)==LOW){in++;w=1;if(in>3){in=1;}}
   if(in==1){gain0=gain1;}if(in==2){gain0=gain2;}if(in==3){gain0=gain3;}
if(digitalRead(plus)==LOW){gain0++;w=1;if(gain0>15){gain0=15;}}
if(digitalRead(minus)==LOW){gain0--;w=1;if(gain0<0){gain0=0;}}
   if(w==1){audio();cl();time=millis();w1=1;w=0;}
   lcd.setCursor(0,0);lcd.print(F("Input: "));
   switch(in)
   {case 1:lcd.print(F("AUX1"));break;
    case 2:lcd.print(F("AUX2"));break;
    case 3:lcd.print(F("BT"));break;}
    gain_d=gain0;
   if(gain_d>=0){for(z=0;z<=gain_d;z++){lcd.setCursor(z/2,1);lcd.write((uint8_t)0);}}
   if((gain_d)%2==0){lcd.setCursor(z/2,1);lcd.write((uint8_t)1);}
   if(in==1){gain1=gain0;}if(in==2){gain2=gain0;}if(in==3){gain3=gain0;}
   lcd.setCursor(11,1);lcd.print(gain0);lcd.print(F(" dB  "));}       
//--------------------------------------------------------------------------- loudness ---------------------------------------------------------------------------------------
if(menu2==1){ 
if(digitalRead(Set)==LOW){lon_f++;w=1;if(lon_f>3){lon_f=0;}}
if(digitalRead(plus)==LOW){lon++;w=1;if(lon>15){lon=15;}}
if(digitalRead(minus)==LOW){lon--;w=1;if(lon<0){lon=0;}}
   if(w==1){audio();cl();time=millis();w1=1;w=0;}lon_d=lon;
   lcd.setCursor(0,0);lcd.print(F("Loudness: "));
   switch(lon_f)
   {case 0: lcd.print(F("FLAT"));break;
   case 1: lcd.print(F("400Hz"));break;
   case 2: lcd.print(F("800Hz"));break;
   case 3: lcd.print(F("2400Hz"));break;}
   lcd.setCursor(0,1);
   if(lon_d>=0){for(z=0;z<=lon_d;z++){lcd.setCursor(z/2,1);lcd.write((uint8_t)0);}}
   if((lon_d)%2==0){lcd.setCursor(z/2,1);lcd.write((uint8_t)1);}
   lcd.setCursor(9,1);lcd.print(F("-"));lcd.print(lon);lcd.print(F(" dB  "));}
//----------------------------------------------------------------------------- out ------------------------------------------------------------------------------------------
if(menu2==2){ 
if(digitalRead(Set)==LOW){out++;w=1;if(out>4){out=0;}}
    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(digitalRead(plus)==LOW){vol_out++;w=1;if(vol_out>15){vol_out=15;}}
if(digitalRead(minus)==LOW){vol_out--;w=1;if(vol_out<0){vol_out=0;}}
   lcd.setCursor(0,0);lcd.print(F("Volume OUT"));
   lcd.setCursor(0,1);
   switch(out){
   case 0:rf=vol_out;lcd.print(F("RF:  +"));lcd.print(rf);break;
   case 1:lf=vol_out;lcd.print(F("LF:  +"));lcd.print(lf);break;
   case 2:rt=vol_out;lcd.print(F("RT:  +"));lcd.print(rt);break;
   case 3:lt=vol_out;lcd.print(F("LT:  +"));lcd.print(lt);break;
   case 4:sab=vol_out;lcd.print(F("SUBW:  +"));lcd.print(sab);break;}
   lcd.print(F(" dB      "));if(w==1){audio();cl();time=millis();w1=1;w=0;}}         
//---------------------------------------------------------------------------treble center -----------------------------------------------------------------------------------
if(menu2==3){
if(digitalRead(plus)==LOW){treb_c++;w=1;if(treb_c>3){treb_c=0;}}
if(digitalRead(minus)==LOW){treb_c--;w=1;if(treb_c<0){treb_c=0;}}
  if(w==1){audio();cl();time=millis();w1=1;w=0;}
  lcd.setCursor(0,0);lcd.print(F("Treble Center "));
  lcd.setCursor(1,6);
  switch(treb_c){
  case 0: lcd.print(F("10.0 kHz"));break;
  case 1: lcd.print(F("12.5 kHz"));break;
  case 2: lcd.print(F("15.0 kHz"));break;
  case 3: lcd.print(F("17.5 kHz"));break;}} 
//-------------------------------------------------------------------------- middle center ------------------------------------------------------------------------------------
if(menu2==4){
if(digitalRead(plus)==LOW){mid_c++;w=1;if(mid_c>3){mid_c=0;}}
if(digitalRead(minus)==LOW){mid_c--;w=1;if(mid_c<0){mid_c=0;}}
  if(w==1){audio();cl();time=millis();w1=1;w=0;}
  lcd.setCursor(0,0);lcd.print(F("Middle Center "));
  lcd.setCursor(1,6);
  switch(mid_c){
  case 0: lcd.print(F("0.5 kHz"));break;
  case 1: lcd.print(F("1.0 kHz"));break;
  case 2: lcd.print(F("1.5 kHz"));break;
  case 3: lcd.print(F("2.5 kHz"));break;}}
//----------------------------------------------------------------------------- bass center ----------------------------------------------------------------------------------
if(menu2==5){
if(digitalRead(plus)==LOW){bas_c++;w=1;if(bas_c>3){bas_c=0;}}
if(digitalRead(minus)==LOW){bas_c--;w=1;if(bas_c<0){bas_c=0;}}
  if(w==1){audio();cl();time=millis();w1=1;w=0;}
  lcd.setCursor(0,0);lcd.print(F("Bass Center "));
  lcd.setCursor(1,6);
  switch(bas_c){
  case 0: lcd.print(F("60 Hz"));break;
  case 1: lcd.print(F("80 Hz"));break;
  case 2: lcd.print(F("100 Hz"));break;
  case 3: lcd.print(F("200 Hz"));break;}}
//-------------------------------------------------------------------------------- subw --------------------------------------------------------------------------------------
if(menu2==6){
if(digitalRead(plus)==LOW){sab_f++;w=1;if(sab_f>3){sab_f=0;}}
if(digitalRead(minus)==LOW){sab_f--;w=1;if(sab_f<0){sab_f=0;}}
  if(w==1){audio();cl();time=millis();w1=1;w=0;}
  lcd.setCursor(0,0);lcd.print(F("Subwoofer Freq."));
  lcd.setCursor(1,6);
  switch(sab_f){
  case 0: lcd.print(F("FLAT"));break;
  case 1: lcd.print(F("80 Hz"));break;
  case 2: lcd.print(F("120 Hz"));break;
  case 3: lcd.print(F("160 Hz"));break;}}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Serial.println(time);

if(millis()-time>10000 && w1==1 && power==0 && mute==0 ){
     EEPROM.update(0,vol);EEPROM.update(1,treb+15);EEPROM.update(3,bas+15);
     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);
      menu2=100; menu=0;w1=0;cl();}

    sensor1.requestTemp();          // запрашиваем измерение температуры радиаторов
    sensor2.requestTemp();
    temperature1 = sensor1.getTemp() ;
    temperature2 = sensor2.getTemp() ;               
if( temperature1 && temperature2 >= temp)
{ digitalWrite(relay,LOW);cl();menu=100;menu2=100;lcd.setCursor(0,0);lcd.print(F("   Temp!!!   "));delay(100);}   
}
void treb_func(){if(treb>15){treb=15;}if(treb<-15){treb=-15;}}
void bass_func(){if(bas>15){bas=15;}if(bas<-15){bas=-15;}} 
void vol_func(){if(vol>80){vol=80;}if(vol<0){vol=0;}}
void cl(){delay(300);lcd.clear();}
void audio(){
tda.setInput(in,gain0,0);    //вх1=1, вх2=2, вх3=3
tda.setInput2(0,0,0);   // не используется
tda.setAtt_loudness(lon,lon_f,0,0);
tda.setSoft(mute,0,0,0,0);//mute off (не менять)
tda.setVolume(vol-79,0);   // общая громкость от 0 до 79 макс
tda.setAtt_LF(64+lf,0);   // гром. лк фронт
tda.setAtt_RF(64+rf,0);   // гром. пк фронт
tda.setAtt_LT(64+lt,0);   // гром. лк тыл
tda.setAtt_RT(64+rt,0);   // гром. пк тыл
tda.setAtt_SUB(64+sab,0);  // гром. савбуфер
tda.setAtt_Mix(79,0);   // не использует
tda.setFilter_Treble(treb,treb_c,0);
//tda.setFilter_Middle(middle,0,0);
tda.setFilter_Bass(bas,0,0);
tda.setSub_M_B(sab_f,mid_c,bas_c,0,0);
tda.setMix_Gain_Eff(1,0,0,0,0); // не используется
tda.setSpektor(0,0,1,0,1,0,0);
}

93

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Добрый день!
Я не разбираюсь в программировании.
Хотел узнать, в скетч, который в основной статье  а именно: TDA7439_01.zip можно просто добавить VU metr и чтобы с пульта можно было регулировать громкость гейна входов?
Прошивка эта  очень понравилась, а STANDBY и автогейн POWER ON, OFF мне не нужны.

94

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Очень долго мучился, как это сделать, скопировать что-то надо из другого скетча, но так и не получается, пишет ошибку компиляции

95

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Разобрался. Посидел, потыкал сравнивал скетчи убирал вставлял символы. Сейчас всё устраивает.

96

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Здравствуйте, собрал усилитель на базе этого проекта, все работает великолепно кроме пульта, прописываю пульт, все нажимается и срабатывает. Беру другой пульт, нажимаю абсолютно любую кнопку и на усилителе срабатывает прокрутка меню и так со всеми пультами что есть дома. Т.е. ардуинка срабатывает на абсолютно любой пульт. Пробовал прописывать несколько пультов, ничего не меняется. На 10-м пине резистор 22к на плюс, на самом ИК приемнике кондер по питанию 47мк, через токоограничительный резистор 100 Ом(пробовал и без него). И еще один неприятный момент, надо ооочень коротко нажимать кнопки пульта, например нажимаю на stby как обычно, оно включает и тут же выключает, в моем случае это очень опасно, т.к. ардуино через реле управляет питанием ШИМ-ки мощного импульсника. Можно ли исправить все это?

97

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Опубликуйте скетч который используете.

98

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

Простите,не могу понять как вставить код

99

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

http://forum.rcl-radio.ru/uploads/images/2024/08/b5ce73e0638c63d5630118dec2668a8e.png

100

Re: TDA7439 + энкодер + ИК пульт + STANDBY + анализатор спектра

#define IR_1 0xA0A058A7 // меню кнопка вверх
#define IR_2 0xA0A018E7 // меню кнопка вниз
#define IR_3 0xA0A09867 // кнопка > 
#define IR_4 0xA0A0A857 // кнопка <
#define IR_5 0xA0A0B847 // BASS++
#define IR_6 0xA0A06897 // BASS--
#define IR_7 0xA0A05CA3 // TREBLE++
#define IR_8 0xA0A0AE51 // TREBLE--
#define IR_9 0xA0A034CB // MIDDLE++
#define IR_10 0xA0A0B44B // MIDDLE--
#define IR_11 0xA0A07887 // IN
#define IR_12 0xA0A040BF // STANDBY
//// VU metr ////////////////////////////
#define GAIN 10 // усиление 0...50
#define STEP 5  // плавность полос 0...20
#define RL 1    // RL - горизонт, вертикаль 0...1
/////////////////////////////////////////
#include <Wire.h>
#include <TDA7439.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>
#include <Encoder.h>
#include <MsTimer2.h>
#include <boarddefs.h>
#include <IRremote.h>
  IRrecv irrecv(10); // указываем вывод модуля IR приемника
  TDA7439 tda;
  Encoder myEnc(9, 8);//CLK, DT
  decode_results ir;
  LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7

  int vol,vol_old,vol_d,treb,treb_d,balans,in,standby=1,gain0,gain1,gain2,gain3,gain4;
  byte w,w1,in_d,gr1,gr2,www;
  int z,z0,z1,bass,bass_d,mids,mids_d,menu,w2,spek;
  unsigned long time,time1, oldPosition  = -999,newPosition;
  int ur,ul,urr,ull,urrr,ulll;
  int x,i,u_maxr,u_maxl;
  int u_l0[20],u_r0[20];
  byte znak_r[8]={0b00000,0b00000,0b11111,0b00101,0b00101,0b11010,0b00000,0b00000};
  byte znak_l[8]={0b00000,0b00000,0b11111,0b10000,0b10000,0b10000,0b00000,0b00000};

 
 void setup() { Serial.begin(9600); Serial.println("TDA7439");
 lcd.begin(16, 2);
  irrecv.enableIRIn(); // запускаем модуль IR
  pinMode(12,OUTPUT);// STANDBY
  digitalWrite(12,LOW);
  lcd.setCursor(0,0);lcd.print("      VLAD    ");delay(1000);
   pinMode(13,INPUT);// меню кнопка энкодера SW
   pinMode(11,INPUT);// in 1-4
   pinMode(A2,INPUT);// POWER
   pinMode(A0,INPUT);// in R
   pinMode(A1,INPUT);// in L
   pinMode(17,OUTPUT);// IN1 (выход A3)
   
   
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  vol = EEPROM.read(0);// vol eeprom 
  bass = EEPROM.read(1)-7;// bass eeprom
  mids = EEPROM.read(2)-7;// mids eeprom
  treb = EEPROM.read(3)-7;// treb eeprom
  balans = EEPROM.read(4)-4;// balans eeprom
  in = EEPROM.read(5);// in eeprom 
  gain1 = EEPROM.read(6);gain2 = EEPROM.read(7);gain3 = EEPROM.read(8);gain4 = EEPROM.read(9);
  switch(in){
     case 0: gain0 = gain1;break;
     case 1: gain0 = gain2;break;
     case 2: gain0 = gain3;break;
     case 3: gain0 = gain4;break;
     }
  if(standby==1){vol_old=vol;vol=0;}   
  delay(500);audio();
 }
 
 void loop() {    
  if (newPosition != oldPosition) {if(spek==1){cl();menu=0;}}
  if(spek==0){
      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};
      lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
    }else{
     byte a1[8] = {0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101};
     byte a2[8] = {0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100};
     byte a3[8] = {0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000};
     byte a4[8] = {0b00011,0b00011,0b00011,0b0011,0b0011,0b0011,0b0011,0b0011};
     byte a5[8] = {0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b11000};
  lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);lcd.createChar(6,a4);lcd.createChar(7,a5);
      }
  lcd.createChar(4,znak_r); 
  lcd.createChar(5,znak_l);   
   ///////////////////// управление //////////////////////////////////////////
   if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);time1=millis();time=millis();w=1;w1=1;if(spek==1){menu=0;cl();}irrecv.resume();}// IR приемник
   if(digitalRead(13)==LOW&&standby==0){menu++;cl();myEnc.write(0);time=millis();w=1;w2=1;if(menu>4){menu=0;}}// меню
   
   if((digitalRead(11)==HIGH || ir.value==IR_11)&&standby==0){if(menu==5){in++;};cl();myEnc.write(0);time=millis();w=1;w2=1;www=1;menu=5;if(in>3){in=0;};audio();}// in

   if(standby==1){menu=100;spek=0;w=0;lcd.setCursor(0,0);lcd.print("   POWER OFF    ");}
   

   if((analogRead(A2)>1000 || ir.value==IR_12)&&standby==1){standby=0;spek=0;cl();time=millis();w=1;w2=1;lcd.clear();lcd.setCursor(0,0);lcd.print("   POWER ON     ");
   digitalWrite(12,HIGH);vol=vol_old;audio();delay(1000);menu=0;w2=1;}
   
   if((analogRead(A2)>1000 || ir.value==IR_12)&&standby==0){standby=1;spek=0;cl();time=millis();w=1;w2=1;lcd.clear();digitalWrite(12,LOW);vol_old=vol;vol=0;audio();delay(500);menu=100;}
 
     if(ir.value==IR_1&&standby==0){menu++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu>4){menu=0;}}// меню кнопка вверх
     if(ir.value==IR_2&&standby==0){menu--;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;if(menu<0){menu=4;}}// меню кнопка вниз

     if(ir.value==IR_5&&menu!=1&&standby==0){bass++;menu=1;gr1=1;gr2=0;cl();;w=1;w2=1;if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}
     if(ir.value==IR_6&&menu!=1&&standby==0){bass--;menu=1;gr1=0;gr2=1;cl();;w=1;w2=1;if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}
     if(ir.value==IR_7&&menu!=2&&standby==0){mids++;menu=2;gr1=1;gr2=0;cl();;w=1;w2=1;if(mids>7){mids=7;}if(mids<-7){mids=-7;}audio();}
     if(ir.value==IR_8&&menu!=2&&standby==0){mids--;menu=2;gr1=0;gr2=1;cl();;w=1;w2=1;if(mids>7){mids=7;}if(mids<-7){mids=-7;}audio();}
     if(ir.value==IR_9&&menu!=3&&standby==0){treb++;menu=3;gr1=1;gr2=0;cl();;w=1;w2=1;if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}
     if(ir.value==IR_10&&menu!=3&&standby==0){treb--;menu=3;gr1=0;gr2=1;cl();w=1;w2=1;if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}
  
  // индикация громкости + управление  //////////////
   if(menu==0){ 
    
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl2();w2=1;if(vol<0){vol=0;}if(vol>48){vol=48;}audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl2();w2=1;if(vol<0){vol=0;}if(vol>48){vol=48;}audio();}// кнопка >>>>>>
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl2();w2=1;if(vol<0){vol=0;}if(vol>48){vol=48;}audio();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl2();w2=1;if(vol<0){vol=0;}if(vol>48){vol=48;}audio();}// кнопка <<<<<<
     
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(vol<0){vol=0;}if(vol>48){vol=48;}audio();} 
 lcd.setCursor(0,0);lcd.print("Volume  ");
  lcd.print(" ");lcd.print(-48+vol);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol_d=vol;
   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;}}
 
 // индикация тембр НЧ  //////////////
 
  if(menu==1){ 
     if(ir.value==IR_3||ir.value==IR_5){bass++;gr1=1;gr2=0;cl1();w2=1;if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){bass++;gr2=0;cl1();w2=1;if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка >>>>>>
     if(ir.value==IR_4||ir.value==IR_6){bass--;gr1=0;gr2=1;cl1();w2=1;if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){bass--;gr1=0;cl1();w2=1;if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();}// кнопка <<<<<<
   
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(bass>7){bass=7;}if(bass<-7){bass=-7;}audio();} 
   lcd.setCursor(0,0);lcd.print("Bass    ");
   lcd.print(" ");lcd.print(bass*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");bass_d=bass*2+15;
   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+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}
   
 // индикация тембр CЧ  //////////////  
 
   if(menu==2){ 
     if(ir.value==IR_3||ir.value==IR_7){mids++;gr1=1;gr2=0;cl1();w2=1;if(mids>7){mids=7;}if(mids<-7){mids=-7;}audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){mids++;gr2=0;cl1();w2=1;if(mids>7){mids=7;}if(mids<-7){mids=-7;}audio();}// кнопка >>>>>>
     if(ir.value==IR_4||ir.value==IR_8){mids--;gr1=0;gr2=1;cl1();w2=1;if(mids>7){mids=7;}if(mids<-7){mids=-7;}audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){mids--;gr1=0;cl1();w2=1;if(mids>7){mids=7;}if(mids<-7){mids=-7;}audio();}// кнопка <<<<<<
   
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    mids=mids+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(mids>7){mids=7;}if(mids<-7){mids=-7;}audio();} 
   lcd.setCursor(0,0);lcd.print("Middle  ");
   lcd.print(" ");lcd.print(mids*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");mids_d=mids*2+15;
   if(w2==1){
   for(z=0,z0=0,z1=0;z<=mids_d;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}
   
  // индикация тембр BЧ  //////////////
  if(menu==3){ 
     if(ir.value==IR_3||ir.value==IR_9){treb++;gr1=1;gr2=0;cl1();w2=1;if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){treb++;gr2=0;cl1();w2=1;if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка >>>>>>
     if(ir.value==IR_4||ir.value==IR_10){treb--;gr1=0;gr2=1;cl1();w2=1;if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){treb--;gr1=0;cl1();w2=1;if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();}// кнопка <<<<<<
   
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(treb>7){treb=7;}if(treb<-7){treb=-7;}audio();} 
   lcd.setCursor(0,0);lcd.print("Treble  ");
   lcd.print(" ");lcd.print(treb*2);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");treb_d=treb*2+15;
   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+3,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+3,1);lcd.print("   ");}}
   if(z1==3){lcd.setCursor(z0+3,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+3,1);lcd.write((uint8_t)2);}w2=0;}}
 
 ///////////////////////////////////////////////////////////
 
  // индикация баланс + управление кнопками +\- 4 дБ ///////
   if(menu==4){
     if(ir.value==IR_3){balans++;gr1=1;gr2=0;cl();if(balans>4){balans=4;}if(balans<-4){balans=-4;}audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){balans++;gr2=0;cl();if(balans>4){balans=4;}if(balans<-4){balans=-4;}audio();}// кнопка >>>>>>
     if(ir.value==IR_4){balans--;gr1=0;gr2=1;cl();if(balans>4){balans=4;}if(balans<-4){balans=-4;}audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){balans--;gr1=0;cl();if(balans>4){balans=4;}if(balans<-4){balans=-4;}audio();}// кнопка <<<<<<
 
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    balans=balans+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;if(balans>4){balans=4;}if(balans<-4){balans=-4;}audio();}
  lcd.setCursor(0,0);
   if(balans>=0){lcd.print("-");}else{lcd.print("+");}
  lcd.print(abs(balans));lcd.print(" dB ");
  lcd.print(" <>  ");
   if(balans>=0){lcd.print("+");}else{lcd.print("-");}
  lcd.print(abs(balans));lcd.print(" dB ");
  lcd.setCursor(0,1);lcd.print("L");
  lcd.setCursor(15,1);lcd.print("R");
   if(balans<0){lcd.setCursor(balans+7,1);lcd.write((uint8_t)0);}
   if(balans>0){lcd.setCursor(balans+8,1);lcd.write((uint8_t)0);}
   if(balans==0){lcd.setCursor(7,1);lcd.write((uint8_t)0);lcd.setCursor(8,1);lcd.write((uint8_t)0);}
 }
///////////////////// input + gain 
  if(in==1&&standby==0){digitalWrite(17,HIGH);}else{digitalWrite(17,LOW);}
   if(menu==5){
     switch(in){
     case 0: gain0 = gain1;break;
     case 1: gain0 = gain2;break;
     case 2: gain0 = gain3;break;
     case 3: gain0 = gain4;break;
     }
     if(ir.value==IR_3){gain0++;gr1=1;gr2=0;cl1();lcd.clear();w2=1;gain_func();audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){gain0++;gr2=0;cl1();lcd.clear();w2=1;gain_func();audio();}// кнопка >>>>>>
     if(ir.value==IR_4){gain0--;gr1=0;gr2=1;cl1();lcd.clear();w2=1;gain_func();audio();}// кнопка < 
     if(ir.value==0xFFFFFFFF and gr2==1){gain0--;gr1=0;cl1();lcd.clear();w2=1;gain_func();audio();}// кнопка <<<<<<
     
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    gain0=gain0+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;www=1;gain_func();audio();} 

     switch(in){
     case 0: gain1 = gain0;break;
     case 1: gain2 = gain0;break;
     case 2: gain3 = gain0;break;
     case 3: gain4 = gain0;break;
     } 
    
     if(www==1){audio();www=0;}
   lcd.setCursor(0,0);
   switch(in){
     case 0: lcd.print("       CD      ");break;
     case 1: lcd.print("      AUX      ");break;
     case 2: lcd.print("     RADIO     ");break;
     case 3: lcd.print("   BLUETOOTH   ");break;
  }
    lcd.setCursor(1,1);lcd.print("GAIN");lcd.print(gain0);lcd.print(" dB");
  }
 /////////////////////////////////////////////////////////////



   if(millis()-time>10000 && w==1){// запись всех настроек в EEPROM 
     EEPROM.update(0,vol);
     EEPROM.update(4,balans+4);
     EEPROM.update(1,bass+7);
     EEPROM.update(2,mids+7);
     EEPROM.update(3,treb+7);
     EEPROM.update(5,in);
     EEPROM.update(6,gain1);EEPROM.update(7,gain2);EEPROM.update(8,gain3);EEPROM.update(9,gain4);
     lcd.clear();w=0,w2=1;menu=100;spek=1;
 }

if(spek==1){
  urr = log(analogRead(0))*GAIN;if(urr>41){urr=41;}
  ull = log(analogRead(1))*GAIN;if(ull>41){ull=41;}
 
  if(RL==0){lcd.setCursor(0,0);lcd.write((uint8_t)4);lcd.setCursor(0,1);lcd.write((uint8_t)5);}
  if(RL==1){lcd.setCursor(0,1);lcd.print("L");lcd.setCursor(0,0);lcd.print("R");}
 
   if(urr<ur){ur=ur-1;delay(STEP);}else{ur = urr;}
  for(z=0,z0=0,z1=0;z<=ur;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+1,1);lcd.write((uint8_t)0);lcd.setCursor(z0+2,1);if(ur<39){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);}
 
   if(ull<ul){ul=ul-1;delay(STEP);}else{ul = ull;}
  for(z=0,z0=0,z1=0;z<=ul;z++,z1++){if(z1>2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+1,0);lcd.write((uint8_t)0);lcd.setCursor(z0+2,0);if(ul<39){lcd.print(" ");}}}
   if(z1==3){lcd.setCursor(z0+1,0);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+1,0);lcd.write((uint8_t)2);}
 
//////////////////////////////////////////////////////////
 
i++;if(i<19){u_l0[i]=abs(ull);u_r0[i]=abs(urr);}else{i=1;}
  if(i==18){u_maxr=0;u_maxl=0;
    for(x=1;x<=15;x++){
      u_maxl=max(u_maxl,u_l0[x]);
      u_maxr=max(u_maxr,u_r0[x]);}}
   
  if(u_maxl<ulll){ulll=ulll-1;}else{ulll = u_maxl;}
  if(u_maxr<urrr){urrr=urrr-1;}else{urrr = u_maxr;}
  
  if(u_maxl<=ul){u_maxl=ull+1;} 
  if(u_maxr<=ur){u_maxr=urr+1;}

  lcd.setCursor(ulll/3+1,0);if(ulll/3>2){if(ulll/10%2==1){lcd.write((uint8_t)7);}if(ulll/10%2==0){lcd.write((uint8_t)6);}}lcd.print("  ");
  lcd.setCursor(urrr/3+1,1);if(urrr/3>2){if(urrr/10%2==1){lcd.write((uint8_t)7);}if(urrr/10%2==0){lcd.write((uint8_t)6);}}lcd.print("  "); 
  delay(3);
  }


 
 }//void

 void gain_func(){if(gain0<0){gain0=0;}if(gain0>15){gain0=15;}} 
 void to_Timer(){newPosition = myEnc.read()/4;}
 void cl(){ir.value=0;delay(300);lcd.clear();spek=0;}
 void cl2(){ir.value=0;delay(50);spek=0;}
 void cl1(){ir.value=0;delay(200);spek=0;}
 void audio(){
  tda.setInput(in+1); // 1 to 4 // номер канала
  tda.inputGain(gain0); // 0 to 15 // усиление 
  tda.setVolume(vol); // 0 to 48 ( 0 is mute) // громкость
  tda.setSnd(bass, 1); //-7 to +7 , 1 - Bass | 2 - Mids | 3 - Trebble
  tda.setSnd(mids, 2);
  tda.setSnd(treb, 3); 
  tda.spkAtt(4-balans, 4+balans); // баланс R L от 0 to 79 (db) 
 }