201

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

Здравствуйте, подскажете пожалуйста а можно изменить скетч для другого экрана 2,4 дюймовый TFT полноцветный экран ST7735 ILI9341 интерфейс драйвера SPI .

202

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

Это сильно напряжно или проект больше не используется.

203

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

Скетч надо полностью переписывать.

204

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

Это возможно ?

205

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

Это возможно, но проект не самый удачный, нет энкодера, нет ИК пульта. Если добавлять энкодер и пульт, то памяти скорее всего не хватит для экрана, нужно будет как то оптимизировать код.
Попробовать можно но у меня аудиопрецессора нет, только дисплей, потребуется тестирование с Вашей стороны.

206

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

Процессор есть , а если использовать Uno или ESP 32, либо ESP8266 тогда возможно памяти хватит. Протестировать смогу.

207

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

ESP 32, либо ESP8266

Там проблемы с пультом будут и энкодером, я не работал с ними в этом плане.

Остается только Atmega328

208

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

Я попробую в выходные начать, но если увижу что памяти совсем нет после активации пульта и энкодера, то нет смысла продолжать.

209

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

Хорошо. У Вас ещё есть проект на ESP32 интернет - радио там вроде всё согласуется и стабильно работает.

210

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

Там нет пульта

211

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

Пульта нет согласен.

212

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

Предварительный скетч

#include <Wire.h> 
#include <SPI.h>
#include <TDA7419.h>           // https://github.com/liman324/TDA7419.git
#include <EEPROM.h>
#include <UTFT.h>              // http://rcl-radio.ru/wp-content/uploads/2019/06/UTFT.zip
#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 

TDA7419 tda;
Encoder myEnc(3, 2);
UTFT tft(TFT01_22SP, 8, 9, 12, 11, 10); // SDI (MOSI), SCK, CS, RESET, DC

extern uint8_t BigFont[];
int menu,menu0=100,vol,treb,mid,bass,bass_q,mid_q,bass_c,treb_c=3,mid_c,sub_c,in,gain,gain1,gain2,gain3;
int lf,rf,lt,rt,sab,att_loun,s_loun;
long oldPosition  = -999,newPosition,times;
bool w1=1,w2=1,w3=1,w4=1;
bool st=1,menu_set=0,mute=1,eep,h1=1,h2=1,h3=1,h4=1,in1=1,h5=1,h6=1;
bool w10,w11,w12,w13,w14,w15,w16,w17,w18,w19,w20,w21,w22;
int i;

void setup(){
  Serial.begin(9600);
  tft.InitLCD(1);
  tft.clrScr();
  tft.setFont(BigFont);
  tft.setColor(0xFFFF);
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  pinMode(4,INPUT); // SW
  pinMode(5,INPUT_PULLUP); // IN
  pinMode(6,INPUT_PULLUP); // SET MENU
  if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}
  vol = EEPROM.read(0);treb = EEPROM.read(1)-15;mid = EEPROM.read(2)-15;bass = EEPROM.read(3)-15;
  in = EEPROM.read(4);gain1 = EEPROM.read(5);gain2 = EEPROM.read(6);gain3 = EEPROM.read(7);
    switch(in){
    case 0: gain=gain1;break;
    case 1: gain=gain2;break;
    case 2: gain=gain3;break;
    }
  tft.setColor(0xcdcd);tft.drawLine(5, 63, 315, 63);tft.drawLine(5, 82, 315, 82);tft.drawLine(5, 101, 315, 101);tft.drawLine(5, 136, 315, 136);
}
void loop(){
  tft.setFont(BigFont);
 if(digitalRead(4)==LOW&&menu_set==0){menu++;if(menu>3){menu=0;}times=millis();eep=1;w1=1,w2=1,w3=1,w4=1;}
 if(digitalRead(4)==LOW&&menu_set==1){menu0++;if(menu0>12){menu0=0;}h6=1;}
 if(digitalRead(5)==LOW){in++;menu=4;in_conf();audio();times=millis();eep=1;in1=1;w1=1,w2=1,w3=1,w4=1;}
 if(digitalRead(6)==LOW&&menu_set==0){menu_set=1;menu=100;menu0=0;h6=1;w1=1,w2=1,w3=1,w4=1;delay(200);}
 if(digitalRead(6)==LOW&&menu_set==1){menu_set=0;menu=0;menu0=100;times=millis();eep=1;h6=1;w1=1,w2=1,w3=1,w4=1;}
  
 if(menu==0){if(newPosition != oldPosition){enc();vol=vol+newPosition;myEnc.write(0);newPosition=0;times=millis();eep=1;w1=1;h1=1;vol_conf();audio();}}
 if(menu==1){if(newPosition != oldPosition){enc();treb=treb+newPosition;myEnc.write(0);newPosition=0;times=millis();eep=1;w2=1;h2=1;treb_conf();audio();}}
 if(menu==2){if(newPosition != oldPosition){enc();mid=mid+newPosition;myEnc.write(0);newPosition=0;times=millis();eep=1;w3=1;h3=1;mid_conf();audio();}}
 if(menu==3){if(newPosition != oldPosition){enc();bass=bass+newPosition;myEnc.write(0);newPosition=0;times=millis();eep=1;w4=1;h4=1;bass_conf();audio();}}

 if(menu0==0){if(newPosition != oldPosition){enc();lf=lf+newPosition;myEnc.write(0);newPosition=0;times=millis();lf_conf();w10=1;audio();}}
 if(menu0==1){if(newPosition != oldPosition){enc();rf=rf+newPosition;myEnc.write(0);newPosition=0;times=millis();rf_conf();w11=1;audio();}}

 if(menu==4){
  switch(in){
    case 0: gain=gain1;break;
    case 1: gain=gain2;break;
    case 2: gain=gain3;break;
    }
 if(newPosition != oldPosition){enc();gain=gain+newPosition;myEnc.write(0);newPosition=0;times=millis();eep=1;in1=1;gain_conf();audio();}
  switch(in){
    case 0: gain1=gain;break;
    case 1: gain2=gain;break;
    case 2: gain3=gain;break;
    }
  }

//// PRINT TFT  
 if(w1==1){w1=0; if(menu==0){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.print("VOLUME", 5, 0);}
 if(w2==1){w2=0; if(menu==1){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.print("TREBLE", 5, 15);}
 if(w3==1){w3=0; if(menu==2){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.print("MIDDLE", 5, 30);}
 if(w4==1){w4=0; if(menu==3){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.print("BASS", 5, 45);}

 if(h1==1){h1=0;for(i=0;i<vol*2.4;i+=5){tft.setColor(0x07ff);tft.fillRect(110+i,13,112+i,2);}tft.setColor(0);tft.fillRect(110+i+5,13,112+i+5,2);}
 if(h2==1){h2=0;for(i=0;i<(treb+15)*6;i+=5){tft.setColor(0x07ff);tft.fillRect(110+i,28,112+i,17);}tft.setColor(0);tft.fillRect(110+i+5,28,112+i+5,17);tft.fillRect(110+i+10,28,112+i+10,17);}
 if(h3==1){h3=0;for(i=0;i<(mid+15)*6;i+=5){tft.setColor(0x07ff);tft.fillRect(110+i,43,112+i,32);}tft.setColor(0);tft.fillRect(110+i+5,43,112+i+5,32);tft.fillRect(110+i+10,43,112+i+10,32);}
 if(h4==1){h4=0;for(i=0;i<(bass+15)*6;i+=5){tft.setColor(0x07ff);tft.fillRect(110+i,58,112+i,47);}tft.setColor(0);tft.fillRect(110+i+5,58,112+i+5,47);tft.fillRect(110+i+10,58,112+i+10,47);}

  
 if(in1==1){in1=0;
 if(menu==4){tft.setColor(0xFFFF);}else{tft.setColor(0xeded);}tft.print("INPUT", 5, 65);tft.printNumI(in+1,95, 65);tft.print("GAIN", 165, 65);tft.printNumI(gain,250, 65);}

 if(st==1){st=0;
 tft.setColor(0xecad);
 tft.print("LF", 5, 84);
 tft.print("RF", 65, 84);
 tft.print("LT", 125, 84);
 tft.print("RT", 185, 84);
 tft.print("SUB", 245, 84);
 tft.print("Loudness ATT", 5, 103);
 tft.print("Loudness FREQ", 5, 118);
 tft.print("Treb Center", 5, 139);
 tft.print("Midd Center", 5, 156);
 tft.print("Bass Center", 5, 173);
 tft.print("SUB Freq", 5, 190);
 tft.print("Middle Q", 5, 207);
 tft.print("Bass Q", 5, 224);
 }

 
 if(h6==1||w10==1){w10=0;if(menu0==0){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(lf,40, 84);}
 if(h6==1||w11==1){w11=0;if(menu0==1){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(rf,100, 84);}
 if(h6==1||w12==1){w12=0;if(menu0==2){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(lt,160, 84);}
 if(h6==1||w13==1){w13=0;if(menu0==3){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(rt,220, 84);}
 if(h6==1||w14==1){w14=0;if(menu0==4){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(rt,300, 84);}
 if(h6==1||w15==1){w15=0;if(menu0==5){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(att_loun,240,103);}
 if(h6==1||w16==1){w16=0;if(menu0==6){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}
 switch(s_loun){
  case 0:tft.print(" FLAT ", 220, 118);break;
  case 1:tft.print(" 400Hz", 220, 118);break;
  case 2:tft.print(" 800Hz", 220, 118);break;
  case 3:tft.print("2.4kHz", 220, 118);break;
  }}
 if(h6==1||w17==1){w17=0;if(menu0==7){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);} 
  switch(treb_c){
  case 0:tft.print("10  kHz", 200, 139);break;
  case 1:tft.print("12.5kHz", 200, 139);break;
  case 2:tft.print("15  kHz", 200, 139);break;
  case 3:tft.print("17.5kHz", 200, 139);break;
  }}
  if(h6==1||w18==1){w18=0;if(menu0==8){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}
  switch(mid_c){
  case 0:tft.print("0.5 kHz", 200, 156);break;
  case 1:tft.print("1.0 kHz", 200, 156);break;
  case 2:tft.print("1.5 kHz", 200, 156);break;
  case 3:tft.print("2.5 kHz", 200, 156);break;
  }}
  if(h6==1||w19==1){w19=0;if(menu0==9){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}
  switch(bass_c){
  case 0:tft.print("60   Hz", 200, 173);break;
  case 1:tft.print("80   Hz", 200, 173);break;
  case 2:tft.print("100  Hz", 200, 173);break;
  case 3:tft.print("200  Hz", 200, 173);break;
  }}
  if(h6==1||w20==1){w20=0;if(menu0==10){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);} 
  switch(sub_c){
  case 0:tft.print(" FLAT  ", 200, 190);break;
  case 1:tft.print("80   Hz", 200, 190);break;
  case 2:tft.print("120  Hz", 200, 190);break;
  case 3:tft.print("160  Hz", 200, 190);break;
  }}
  if(h6==1||w21==1){w21=0;if(menu0==11){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}
  switch(mid_q){
  case 0:tft.print("  0.50 ", 200, 207);break;
  case 1:tft.print("  0.75 ", 200, 207);break;
  case 2:tft.print("  1.00 ", 200, 207);break;
  case 3:tft.print("  1.25 ", 200, 207);break;
  }}
  if(h6==1||w22==1){w22=0;if(menu0==12){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}   
  switch(bass_q){
  case 0:tft.print("  1.00 ", 200, 224);break;
  case 1:tft.print("  1.25 ", 200, 224);break;
  case 2:tft.print("  1.50 ", 200, 224);break;
  case 3:tft.print("  2.00 ", 200, 224);break;
  }}
 if(h6==1){h6=0;} 
 
 
 
 
//// EEPROM
 if(millis()-times>3000 && eep==1){eep=0;menu=0;w1=1,w2=1,w3=1,w4=1;in1=1;
    EEPROM.update(0,vol);EEPROM.update(1,treb+15);EEPROM.update(2,mid+15);EEPROM.update(3,bass+15);EEPROM.update(4,in);
    EEPROM.update(5,gain1);EEPROM.update(6,gain2);EEPROM.update(7,gain3);
 }   
}

void to_Timer(){newPosition = myEnc.read()/4;}
void enc(){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}}
void vol_conf(){if(vol>80){vol=80;}if(vol<0){vol=0;}}
void treb_conf(){if(treb>15){treb=15;}if(treb<-15){treb=-15;}}
void mid_conf(){if(mid>15){mid=15;}if(mid<-15){mid=-15;}}
void bass_conf(){if(bass>15){bass=15;}if(bass<-15){bass=-15;}}
void in_conf(){if(in>2){in=0;}}
void gain_conf(){if(gain>9){gain=9;}if(gain<0){gain=0;}}
void lf_conf(){if(lf>9){lf=9;}if(lf<0){lf=0;}}
void rf_conf(){if(rf>9){rf=9;}if(rf<0){rf=0;}}

 void audio(){
tda.setInput(in+1,gain*2,0);    //вх1=1, вх2=2, вх3=3
tda.setInput2(2,0,0);   // не используется
tda.setAtt_loudness(att_loun,s_loun,0,0);
tda.setSoft(mute,0,0,0,0);//mute off (не менять)
tda.setVolume(vol-79,0);   // общая громкость от 0 до 79 макс
tda.setAtt_LF(79-(lf*2),0);   // гром. лк фронт
tda.setAtt_RF(79-(rf*2),0);   // гром. пк фронт
tda.setAtt_LT(79-lt,0);   // гром. лк тыл
tda.setAtt_RT(79-rt,0);   // гром. пк тыл
tda.setAtt_SUB(79-sab,0);  // гром. савбуфер
tda.setAtt_Mix(79,0);   // не используется
tda.setFilter_Treble(treb,treb_c,0); 
tda.setFilter_Middle(mid,mid_q,0);
tda.setFilter_Bass(bass,bass_q,0);
tda.setSub_M_B(sub_c,mid_c,bass_c,0,0);
tda.setMix_Gain_Eff(1,0,0,0,0); // не используется
tda.setSpektor(0,0,0,0,0,0,0);
}

213

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

Подскажите какой дисплей я могу подключить . У меня на руках в данный момент TFT 1.8 дюйма с размерами 128*160. В ближайшее время мне подъедет экран с диагональю 2.8 дюйма. Смогу ли я пока протестировать с этим экраном на 1.8 ?
Ардуино нано подойдёт ?

214

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

TFT 1.8 дюйма с размерами 128*160 - не подойдет, скетч рассчитан на 240*320

215 (2024-04-27 23:46:08 отредактировано vadim_ilin)

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

На 2.8 подойдет? Вот такой экран должен подъехать (2,8 дюйма 240x320 SPI TFT 5 В/3,3 В PCB адаптер Micro SD карта  / ST7789V ЖК-дисплей для Arduino )

216

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

Размер экрана не важен, главное разрешение на 240*320

217

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

А какую плату можно использовать ?

218

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

Скетч пишется под Arduino Nano

219

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

Ясно, как приедет экран сразу отпишусь. Заранее огромное спасибо !!! И ещё один вопрос , у Вас есть проект ЦАПа на ресивере CS8416 http://rcl-radio.ru/?p=91050, а можно к нему добавить отображение частоты дискретизации и битности входного сигнала.

220

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

Проект уже старый, это надо было сразу делать, а сейчас я уже не помню что там да как.

221

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

А если сделать новый проект за основу взять цап Аманеро а на выходе PCM5102.

222

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

https://aliexpress.ru/item/32874113831. … 5557921711

223

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

Я сейчас аудио ЦАПами не занимаюсь, нет интереса у пользователей к этой теме.
Тем более 2000 это дорого для проекта, максимум что я трачу на проект это не больше 250 р.

224

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

Понятно, а что посоветуете в плане отображения сигнала.

225

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

http://forum.rcl-radio.ru/uploads/images/2024/04/a860270434c56911639cb46ab06c84db.png

http://forum.rcl-radio.ru/uploads/images/2024/04/b271626e53f4b27d19677b352b93549a.png

http://rcl-radio.ru/wp-content/uploads/2019/04/7347987203.png

IR пока не сделал

// ENCODER
#define CLK_ENC  3
#define TD_ENC   2
#define SW_ENC   4
// BUTTON
#define IN       5
#define SET      6
#define MUTE     7
// OUTPUT_LED_MUTE
#define OUT_MUTE 13

#include <Wire.h> 
#include <TDA7419.h>           // https://github.com/liman324/TDA7419.git
#include <EEPROM.h>
#include <UTFT.h>              // http://rcl-radio.ru/wp-content/uploads/2019/06/UTFT.zip
#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 

TDA7419 tda;
Encoder myEnc(CLK_ENC, TD_ENC);
UTFT tft(TFT01_22SP, 8, 9, 12, 11, 10); // SDI (MOSI), SCK, CS, RESET, DC


extern uint8_t BigFont[];
int menu,menu0=100,vol,treb,mid,bass,bass_q,mid_q,bass_c,treb_c=3,mid_c,sub_c,in,gain,gain1,gain2,gain3;
int lf,rf,lt,rt,sab,att_loun,s_loun;
long oldPosition  = -999,newPosition,times;
bool w1=1,w2=1,w3=1,w4=1;
bool st=1,menu_set=0,mute=1,eep,h1=1,h2=1,h3=1,h4=1,in1=1,h5=1,h6=1;
bool ss=0,w10,w11,w12,w13,w14,w15,w16,w17,w18,w19,w20,w21,w22;
int i;

void setup(){
  Serial.begin(9600);
  tft.InitLCD(1);
  tft.clrScr();
  tft.setFont(BigFont);
  tft.setColor(0xFFFF);
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  pinMode(SW_ENC,INPUT); // SW
  pinMode(IN,INPUT_PULLUP); // IN
  pinMode(SET,INPUT_PULLUP); // SET MENU
  pinMode(MUTE,INPUT_PULLUP); // MUTE
  pinMode(OUT_MUTE,OUTPUT); // OUT_MUTE
  if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}
  vol = EEPROM.read(0);treb = EEPROM.read(1)-15;mid = EEPROM.read(2)-15;bass = EEPROM.read(3)-15;
  in = EEPROM.read(4);gain1 = EEPROM.read(5);gain2 = EEPROM.read(6);gain3 = EEPROM.read(7);
  lf = EEPROM.read(8);lt = EEPROM.read(9);rf = EEPROM.read(10);rt = EEPROM.read(11);sab = EEPROM.read(12);
  att_loun = EEPROM.read(13);s_loun = EEPROM.read(14);treb_c = EEPROM.read(15);mid_c = EEPROM.read(16);bass_c = EEPROM.read(17);
  sub_c = EEPROM.read(18);mid_q = EEPROM.read(19);bass_q = EEPROM.read(20);
    switch(in){
    case 0: gain=gain1;break;
    case 1: gain=gain2;break;
    case 2: gain=gain3;break;
    }
  audio();  
}

void loop(){
 if(mute==1){
 if(digitalRead(SW_ENC)==LOW&&menu_set==0){menu++;if(menu>3){menu=0;}times=millis();ss=1;eep=1;w1=1,w2=1,w3=1,w4=1;}
 if(digitalRead(SW_ENC)==LOW&&menu_set==1){menu0++;if(menu0>12){menu0=0;}h6=1;}
 if(digitalRead(IN)==LOW){in++;menu=4;in_conf();audio();times=millis();ss=1;eep=1;in1=1;w1=1,w2=1,w3=1,w4=1;}
 if(digitalRead(SET)==LOW&&menu_set==0&&ss==0){menu_set=1;menu=100;menu0=0;w10=1;w1=1;delay(200);}
 if(digitalRead(SET)==LOW&&menu_set==1){menu_set=0;menu=0;menu0=100;h6=1;w1=1;}
 }
 if(digitalRead(MUTE)==LOW&&mute==1){mute=0;menu=0;menu0=100;h6=1;w1=1;audio();delay(200);}
 if(digitalRead(MUTE)==LOW&&mute==0){mute=1;menu=0;menu0=100;h6=1;w1=1;audio();delay(200);}
 if(mute==0){digitalWrite(OUT_MUTE,HIGH);}else{digitalWrite(OUT_MUTE,LOW);}
 
 if(mute==1){
 if(menu==0){if(newPosition != oldPosition){enc();vol=vol+newPosition;myEnc.write(0);newPosition=0;times=millis();eep=1;h1=1;vol_conf();audio();}}
 if(menu==1){if(newPosition != oldPosition){enc();treb=treb+newPosition;myEnc.write(0);newPosition=0;times=millis();eep=1;h2=1;treb_conf();audio();}}
 if(menu==2){if(newPosition != oldPosition){enc();mid=mid+newPosition;myEnc.write(0);newPosition=0;times=millis();eep=1;h3=1;mid_conf();audio();}}
 if(menu==3){if(newPosition != oldPosition){enc();bass=bass+newPosition;myEnc.write(0);newPosition=0;times=millis();eep=1;h4=1;bass_conf();audio();}}

 if(menu0==0){if(newPosition != oldPosition){enc();lf=lf+newPosition;myEnc.write(0);newPosition=0;times=millis();lf_conf();w10=1;audio();}}
 if(menu0==1){if(newPosition != oldPosition){enc();rf=rf+newPosition;myEnc.write(0);newPosition=0;times=millis();rf_conf();w11=1;audio();}}
 if(menu0==2){if(newPosition != oldPosition){enc();lt=lt+newPosition;myEnc.write(0);newPosition=0;times=millis();lt_conf();w12=1;audio();}}
 if(menu0==3){if(newPosition != oldPosition){enc();rt=rt+newPosition;myEnc.write(0);newPosition=0;times=millis();rt_conf();w13=1;audio();}}
 if(menu0==4){if(newPosition != oldPosition){enc();sab=sab+newPosition;myEnc.write(0);newPosition=0;times=millis();sab_conf();w14=1;audio();}}
 if(menu0==5){if(newPosition != oldPosition){enc();att_loun=att_loun+newPosition;myEnc.write(0);newPosition=0;times=millis();att_loun_conf();w15=1;audio();}}
 if(menu0==6){if(newPosition != oldPosition){enc();s_loun=s_loun+newPosition;myEnc.write(0);newPosition=0;times=millis();s_loun_conf();w16=1;audio();}}
 if(menu0==7){if(newPosition != oldPosition){enc();treb_c=treb_c+newPosition;myEnc.write(0);newPosition=0;times=millis();treb_c_conf();w17=1;audio();}}
 if(menu0==8){if(newPosition != oldPosition){enc();mid_c=mid_c+newPosition;myEnc.write(0);newPosition=0;times=millis();mid_c_conf();w18=1;audio();}}
 if(menu0==9){if(newPosition != oldPosition){enc();bass_c=bass_c+newPosition;myEnc.write(0);newPosition=0;times=millis();bass_c_conf();w19=1;audio();}}
 if(menu0==10){if(newPosition != oldPosition){enc();sub_c=sub_c+newPosition;myEnc.write(0);newPosition=0;times=millis();sub_c_conf();w20=1;audio();}}
 if(menu0==11){if(newPosition != oldPosition){enc();mid_q=mid_q+newPosition;myEnc.write(0);newPosition=0;times=millis();mid_q_conf();w21=1;audio();}}
 if(menu0==12){if(newPosition != oldPosition){enc();bass_q=bass_q+newPosition;myEnc.write(0);newPosition=0;times=millis();bass_q_conf();w22=1;audio();}}
 }
 
 if(menu==4){
  switch(in){
    case 0: gain=gain1;break;
    case 1: gain=gain2;break;
    case 2: gain=gain3;break;
    }
 if(newPosition != oldPosition){enc();gain=gain+newPosition;myEnc.write(0);newPosition=0;times=millis();eep=1;in1=1;gain_conf();audio();}
  switch(in){
    case 0: gain1=gain;break;
    case 1: gain2=gain;break;
    case 2: gain3=gain;break;
    }
  }

//// PRINT TFT  
 if(w1==1){w1=0; if(menu==0){tft.setColor(0xFFFF);}else{tft.setColor(0xfecd);}if(mute==1){tft.print("VOLUME", 5, 0);}if(mute==0){tft.print("MUTE  ", 5, 0);}}
 if(w2==1){w2=0; if(menu==1){tft.setColor(0xFFFF);}else{tft.setColor(0xfecd);}tft.print("TREBLE", 5, 15);}
 if(w3==1){w3=0; if(menu==2){tft.setColor(0xFFFF);}else{tft.setColor(0xfecd);}tft.print("MIDDLE", 5, 30);}
 if(w4==1){w4=0; if(menu==3){tft.setColor(0xFFFF);}else{tft.setColor(0xfecd);}tft.print("BASS", 5, 45);}

 if(h1==1){h1=0;for(i=0;i<vol*2.4;i+=5){tft.setColor(0x07ff);tft.fillRect(110+i,13,112+i,2);}tft.setColor(0);tft.fillRect(110+i+5,13,112+i+5,2);}
 if(h2==1){h2=0;for(i=0;i<(treb+15)*6;i+=5){tft.setColor(0x07ff);tft.fillRect(110+i,28,112+i,17);}tft.setColor(0);tft.fillRect(110+i+5,28,112+i+5,17);tft.fillRect(110+i+10,28,112+i+10,17);}
 if(h3==1){h3=0;for(i=0;i<(mid+15)*6;i+=5){tft.setColor(0x07ff);tft.fillRect(110+i,43,112+i,32);}tft.setColor(0);tft.fillRect(110+i+5,43,112+i+5,32);tft.fillRect(110+i+10,43,112+i+10,32);}
 if(h4==1){h4=0;for(i=0;i<(bass+15)*6;i+=5){tft.setColor(0x07ff);tft.fillRect(110+i,58,112+i,47);}tft.setColor(0);tft.fillRect(110+i+5,58,112+i+5,47);tft.fillRect(110+i+10,58,112+i+10,47);}

 if(in1==1){in1=0;if(menu==4){tft.setColor(0xFFFF);}else{tft.setColor(0xdfcf);}tft.print("INPUT", 5, 65);tft.printNumI(in+1,95, 65);tft.printNumI(gain,250, 65);}

 if(st==1){st=0;
 tft.setColor(0xcdcd);tft.drawLine(5, 63, 315, 63);tft.drawLine(5, 82, 315, 82);tft.drawLine(5, 101, 315, 101);tft.drawLine(5, 136, 315, 136);
 tft.setColor(0xdfcf);
 tft.print("Gain", 165, 65);
 tft.setColor(0xffaf);
 tft.print("LF", 5, 84);
 tft.print("RF", 65, 84);
 tft.print("LT", 125, 84);
 tft.print("RT", 185, 84);
 tft.print("SUB", 245, 84);
 tft.print("Loudness Att", 5, 103);
 tft.print("Loudness Freq", 5, 118);
 tft.print("Treb Center", 5, 139);
 tft.print("Midd Center", 5, 156);
 tft.print("Bass Center", 5, 173);
 tft.print("SUB Freq", 5, 190);
 tft.print("Middle Q", 5, 207);
 tft.print("Bass Q", 5, 224);
 }

 
 if(h6==1||w10==1){w10=0;if(menu0==0){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(lf,40, 84);}
 if(h6==1||w11==1){w11=0;if(menu0==1){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(rf,100, 84);}
 if(h6==1||w12==1){w12=0;if(menu0==2){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(lt,160, 84);}
 if(h6==1||w13==1){w13=0;if(menu0==3){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(rt,220, 84);}
 if(h6==1||w14==1){w14=0;if(menu0==4){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(sab,300, 84);}
 if(h6==1||w15==1){w15=0;if(menu0==5){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(att_loun,240,103);}
 if(h6==1||w16==1){w16=0;if(menu0==6){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}
 switch(s_loun){
  case 0:tft.print(" FLAT ", 220, 118);break;
  case 1:tft.print(" 400Hz", 220, 118);break;
  case 2:tft.print(" 800Hz", 220, 118);break;
  case 3:tft.print("2400Hz", 220, 118);break;
  }}
 if(h6==1||w17==1){w17=0;if(menu0==7){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);} 
  switch(treb_c){
  case 0:tft.print("10.0kHz", 200, 139);break;
  case 1:tft.print("12.5kHz", 200, 139);break;
  case 2:tft.print("15.0kHz", 200, 139);break;
  case 3:tft.print("17.5kHz", 200, 139);break;
  }}
  if(h6==1||w18==1){w18=0;if(menu0==8){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}
  switch(mid_c){
  case 0:tft.print("0.5kHz", 210, 156);break;
  case 1:tft.print("1.0kHz", 210, 156);break;
  case 2:tft.print("1.5kHz", 210, 156);break;
  case 3:tft.print("2.5kHz", 210, 156);break;
  }}
  if(h6==1||w19==1){w19=0;if(menu0==9){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}
  switch(bass_c){
  case 0:tft.print("60 Hz", 220, 173);break;
  case 1:tft.print("80 Hz", 220, 173);break;
  case 2:tft.print("100Hz", 220, 173);break;
  case 3:tft.print("200Hz", 200, 173);break;
  }}
  if(h6==1||w20==1){w20=0;if(menu0==10){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);} 
  switch(sub_c){
  case 0:tft.print("FLAT ", 220, 190);break;
  case 1:tft.print("80 Hz", 220, 190);break;
  case 2:tft.print("120Hz", 220, 190);break;
  case 3:tft.print("160Hz", 220, 190);break;
  }}
  if(h6==1||w21==1){w21=0;if(menu0==11){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}
  switch(mid_q){
  case 0:tft.print("0.50", 220, 207);break;
  case 1:tft.print("0.75", 220, 207);break;
  case 2:tft.print("1.00", 220, 207);break;
  case 3:tft.print("1.25", 220, 207);break;
  }}
  if(h6==1||w22==1){w22=0;if(menu0==12){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}   
  switch(bass_q){
  case 0:tft.print("1.00", 220, 224);break;
  case 1:tft.print("1.25", 220, 224);break;
  case 2:tft.print("1.50", 220, 224);break;
  case 3:tft.print("2.00", 220, 224);break;
  }}
 if(h6==1){h6=0;} 
 if(menu0<100){menu=100;}
 
//// EEPROM
 if(millis()-times>3000 && eep==1){eep=0;menu=0;w1=1,w2=1,w3=1,w4=1;in1=1;ss=0;
    EEPROM.update(0,vol);EEPROM.update(1,treb+15);EEPROM.update(2,mid+15);EEPROM.update(3,bass+15);EEPROM.update(4,in);
    EEPROM.update(5,gain1);EEPROM.update(6,gain2);EEPROM.update(7,gain3);
    EEPROM.update(8,lf);EEPROM.update(9,lt);EEPROM.update(10,rf);EEPROM.update(11,rt);EEPROM.update(12,sab);
    EEPROM.update(13,att_loun);EEPROM.update(14,s_loun);EEPROM.update(15,treb_c);EEPROM.update(16,mid_c);EEPROM.update(17,bass_c);
    EEPROM.update(18,sub_c);EEPROM.update(19,mid_q);EEPROM.update(20,bass_q);
 }   
}

void to_Timer(){newPosition = myEnc.read()/4;}
void enc(){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}}
void vol_conf(){if(vol>80){vol=80;}if(vol<0){vol=0;}}
void treb_conf(){if(treb>15){treb=15;}if(treb<-15){treb=-15;}}
void mid_conf(){if(mid>15){mid=15;}if(mid<-15){mid=-15;}}
void bass_conf(){if(bass>15){bass=15;}if(bass<-15){bass=-15;}}
void in_conf(){if(in>2){in=0;}}
void gain_conf(){if(gain>9){gain=9;}if(gain<0){gain=0;}}
void lf_conf(){if(lf>9){lf=9;}if(lf<0){lf=0;}}
void rf_conf(){if(rf>9){rf=9;}if(rf<0){rf=0;}}
void lt_conf(){if(lt>9){lt=9;}if(lt<0){lt=0;}}
void rt_conf(){if(rt>9){rt=9;}if(rt<0){rt=0;}}
void sab_conf(){if(sab>9){sab=9;}if(sab<0){sab=0;}}
void att_loun_conf(){if(att_loun>9){att_loun=9;}if(att_loun<0){att_loun=0;}}
void s_loun_conf(){if(s_loun>3){s_loun=3;}if(s_loun<0){s_loun=0;}}
void treb_c_conf(){if(treb_c>3){treb_c=3;}if(treb_c<0){treb_c=0;}}
void mid_c_conf(){if(mid_c>3){mid_c=3;}if(mid_c<0){mid_c=0;}}
void bass_c_conf(){if(bass_c>3){bass_c=3;}if(bass_c<0){bass_c=0;}}
void sub_c_conf(){if(sub_c>3){sub_c=3;}if(sub_c<0){sub_c=0;}}
void mid_q_conf(){if(mid_q>3){mid_q=3;}if(mid_q<0){mid_q=0;}}
void bass_q_conf(){if(bass_q>3){bass_q=3;}if(bass_q<0){bass_q=0;}}

void audio(){
tda.setInput(in+1,gain*2,0);    //вх1=1, вх2=2, вх3=3
tda.setInput2(2,0,0);   // не используется
tda.setAtt_loudness(att_loun,s_loun,0,0);
tda.setSoft(mute,0,0,0,0);//mute off (не менять)
tda.setVolume(vol-79,0);   // общая громкость от 0 до 79 макс
tda.setAtt_LF(79-(lf*2),0);   // гром. лк фронт
tda.setAtt_RF(79-(rf*2),0);   // гром. пк фронт
tda.setAtt_LT(79-(lt*2),0);   // гром. лк тыл
tda.setAtt_RT(79-(rt*2),0);   // гром. пк тыл
tda.setAtt_SUB(79-(sab*2),0);  // гром. савбуфер
tda.setAtt_Mix(79,0);   // не используется
tda.setFilter_Treble(treb,treb_c,0); 
tda.setFilter_Middle(mid,mid_q,0);
tda.setFilter_Bass(bass,bass_q,0);
tda.setSub_M_B(sub_c,mid_c,bass_c,0,0);
tda.setMix_Gain_Eff(1,0,0,0,0); // не используется
tda.setSpektor(0,0,0,0,0,0,0);
}