26

Re: PT2323+TDA7448

Кнопка
http://forum.rcl-radio.ru/uploads/images/2019/11/3e267125b2e9c17fb56cecb61f2dcdc4.png

или так, чтобы не править скетч
http://forum.rcl-radio.ru/uploads/images/2019/11/90479e1a1e8d77279cfc70869af3019e.png

27

Re: PT2323+TDA7448

я поправил)) вход 13 на высокий,так стало лучше,энкодер тоже подтянул к плюсу,но наверное все таки он неисправен)) прибавлять прибавляет а убавлять иногда что то проскакивает и сново молчит....сейчас сгоняю в гараж микросхем много откуда нибудь другой выпаю))))у меня другой вопрос))) а вот допустим выбираю я вход например (in 5) а как сделать так что бы он включился то?

28

Re: PT2323+TDA7448

Поправьте скетч, я допустил ошибку:
pt.setInput(0); // входы 1...4 (0...3) или 6 моно (4)
заменить на:
pt.setInput(in); // входы 1...4 (0...3) или 6 моно (4)

29

Re: PT2323+TDA7448

Даоткуда ты такой взялся то))))))))))))))))))))поправил и все фурыкает)))))))))))))))

30

Re: PT2323+TDA7448

https://cloud.mail.ru/stock/7DRsP2N76Xq1jQfzJ4PFHT67

31

Re: PT2323+TDA7448

как здесь видео то скидывать))

32

Re: PT2323+TDA7448

Я рад что у Вас все получилось. Видео можно выкладывать только через Ютуб.

33

Re: PT2323+TDA7448

да если бы не ты )))я бы после долгих мучений выкинул бы этот ящик)))))))))

34

Re: PT2323+TDA7448

у меня просьба) а нельзя в скетче поправить управление басом? я так понял звук сделан как мастер тоесть на все каналы?

35

Re: PT2323+TDA7448

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

36

Re: PT2323+TDA7448

да да да))) управление громкостью самого сабвуфера отдельно от колонок)))а то долбит соседи по потолку начинают стучать))))))))))))))

37

Re: PT2323+TDA7448

#define IR_8 0x2FDB24D // Кнопка MENU
#define IR_3 0x2FD906F // Кнопка >
#define IR_4 0x2FDF20D // Кнопка <

#include <Wire.h>
#include <PT2323.h>
#include <TDA7448.h>
#include <Encoder.h>
#include <EEPROM.h>
#include <MsTimer2.h>
#include <boarddefs.h>
#include <IRremote.h>
#include <LiquidCrystal.h>
TDA7448 tda;
PT2323 pt;
IRrecv irrecv(10); // указываем вывод модуля IR приемника
decode_results ir;
LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 подключение LCD
Encoder myEnc(9, 8);//CLK, DT подключение энкодера
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 newPosition, times, oldPosition  = -999;
int i, w, w1, menu, vol, vol_d, z, z0, z1, gr1, gr2, in;

void setup() {
  Serial.begin(9600); Wire.begin(); irrecv.enableIRIn(); // запускаем модуль IR
  lcd.begin(16, 2);
  pinMode(13, INPUT); // КНОПКА ЭНКОДЕРA
  MsTimer2::set(3, to_Timer); MsTimer2::start();
  lcd.createChar(0, a1); lcd.createChar(1, a2); lcd.createChar(2, a3);
  lcd.setCursor(0, 0); lcd.print("    TDA 7448    ");
  lcd.setCursor(0, 1); lcd.print("    PT  2323    ");
  delay(1000); cl();
  if (EEPROM.read(100) != 0) {
    for (i = 0; i < 101; i++) {
      EEPROM.update(i, 0); // очистка памяти при первом включении
    }
  }
  vol = EEPROM.read(0) - 79; in = EEPROM.read(1);
  audio_tda(); audio_pt();
}

void loop() {
  if ( irrecv.decode( &ir )) {
    Serial.print("0x");  // IR приемник
    Serial.println( ir.value, HEX);
    times = millis();
    w = 1;
    w1 = 1;
    irrecv.resume();
  }
  if (digitalRead(13) == HIGH) {
    menu++;  // меню
    cl();
    myEnc.write(0);
    times = millis();
    w = 1;
    w1 = 1;
    if (menu > 1) {
      menu = 0;
    }
  }
  if (ir.value == IR_8) {
    menu++;  // меню
    gr1 = 0;
    gr2 = 0;
    cl();
    times = millis();
    w = 1;
    w1 = 1;
    if (menu > 1) {
      menu = 0;
    }
  }

  //////////////////// VOLUME ///////////////////////////////////////////////////////////////////////////////////////
  if (menu == 0) {
    if (ir.value == IR_3) {
      vol++;  // кнопка >
      gr1 = 1;
      gr2 = 0;
      cl1();
      w1 = 1;
      vol_func();
      audio_tda();
      audio_pt();
    }
    if (ir.value == 0xFFFFFFFF and gr1 == 1) {
      vol++;  // кнопка >>>>>>
      gr2 = 0;
      cl1();
      w1 = 1;
      vol_func();
      audio_tda();
      audio_pt();
    }
    if (ir.value == IR_4) {
      vol--;  // кнопка <
      gr1 = 0;
      gr2 = 1;
      cl1();
      w1 = 1;
      vol_func();
      audio_tda();
      audio_pt();
    }
    if (ir.value == 0xFFFFFFFF and gr2 == 1) {
      vol--;  // кнопка <<<<<<
      gr1 = 0;
      cl1();
      w1 = 1;
      vol_func();
      audio_tda();
      audio_pt();
    }

    if (newPosition != oldPosition) {
      oldPosition = newPosition;
      vol = vol + newPosition; myEnc.write(0); newPosition = 0; times = millis(); w = 1; w1 = 1; vol_func(); audio_tda(); audio_pt();
    }
    lcd.setCursor(0, 0); lcd.print("VOLUME  ");
    lcd.print(" "); lcd.print(vol); lcd.print(" "); lcd.setCursor(13, 0); lcd.print("dB"); vol_d = vol + 48;
    if (w1 == 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);
      } w1 = 0;
    }
  }

  /////////////////// INPUT ////////////////////////////////////////////////////////////////////////////////////////
  if (menu == 1) {
    if (ir.value == IR_3) {
      in++;  // кнопка >
      gr1 = 1;
      gr2 = 0;
      cl1();
      w1 = 1;
      in_func();
      audio_tda();
      audio_pt();
    }
    if (ir.value == 0xFFFFFFFF and gr1 == 1) {
      in++;  // кнопка >>>>>>
      gr2 = 0;
      cl1();
      w1 = 1;
      in_func();
      audio_tda();
      audio_pt();
    }
    if (ir.value == IR_4) {
      in--;  // кнопка <
      gr1 = 0;
      gr2 = 1;
      cl1();
      w1 = 1;
      in_func();
      audio_tda();
      audio_pt();
    }
    if (ir.value == 0xFFFFFFFF and gr2 == 1) {
      in--;  // кнопка <<<<<<
      gr1 = 0;
      cl1();
      w1 = 1;
      in_func();
      audio_tda();
      audio_pt();
    }

    if (newPosition != oldPosition) {
      oldPosition = newPosition;
      in = in + newPosition; myEnc.write(0); newPosition = 0; times = millis(); w = 1; w1 = 1; in_func(); audio_tda(); audio_pt();
    }
    lcd.setCursor(0, 0); lcd.print("INPUT  ");
    switch (in) { // пропишите свои названия входов
      case 0: lcd.print("sr_sl  "); break;
      case 1: lcd.print("mp3  "); break;
      case 2: lcd.print("blutuch  "); break;
      case 3: lcd.print("radio  "); break;
      case 4: lcd.print("stereo "); break;
    }
  }

  ///////////////// EEPROM ///////////////////////////////////////////////////////////////////////////////////////
  if (millis() - times > 10000 && w == 1) {
    EEPROM.update(0, vol + 79);
    EEPROM.update(1, in);
    menu = 0; cl(); w = 0, w1 = 1;
  }

}//loop

void in_func() {
  if (in < 0) {
    in = 4;
  } if (in > 4) {
    in = 0;
  }
}
void vol_func() {
  if (vol > 0) {
    vol = 0;
  } if (vol < -79) {
    vol = -79;
  }
}
void cl() {
  ir.value = 0;
  delay(300);
  lcd.clear();
}
void cl1() {
  ir.value = 0;
  delay(100);
}
void audio_pt() {
  pt.setInput(in); // входы 1...4 (0...3) или 6 моно (4)
  pt.setMute(0, 0, 0, 0, 0, 0, 0);
  pt.setFeature(0, 1); // дополнительные функции 0...3
  // 0 - Enhanced Surround Function Active
  // 1 - Enhanced Surround Function Disabled
  // 0 - Mixed Channel (0dB) Setup
  // 1 - Mixed Channel (+6dB) Setup
}
void audio_tda() {
  tda.setAtt(1, vol); // 0 макс громк, -79(79) мин громк
  tda.setAtt(2, vol);
  tda.setAtt(3, vol);
  tda.setAtt(4, vol);
  tda.setAtt(5, vol);
  tda.setAtt(6, vol);
}

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

38

Re: PT2323+TDA7448

Удержание кнопки энкодера активирует режим аттенюатора, активны все каналы RR RL RF LF CT SUB , глубина регулировки  от 0 до -20 дБ. Каналы могут быть перепутаны, так что сами поправите название выходов. все настройки сохраняются в памяти. для выхода из режима подождать 10 сек.

#define IR_8 0x2FDB24D // Кнопка MENU
#define IR_3 0x2FD906F // Кнопка >
#define IR_4 0x2FDF20D // Кнопка <

#include <Wire.h> 
#include <PT2323.h>
#include <TDA7448.h> 
#include <Encoder.h>
#include <EEPROM.h>
#include <MsTimer2.h>
#include <boarddefs.h>
#include <IRremote.h>
#include <LiquidCrystal.h>
  TDA7448 tda;
  PT2323 pt; 
 IRrecv irrecv(10); // указываем вывод модуля IR приемника
 decode_results ir;
 LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 подключение LCD
 Encoder myEnc(9, 8);//CLK, DT подключение энкодера
   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 newPosition,times,oldPosition  = -999;
  int x,i,w,w1,menu,menu1=0,vol,vol_d,z,z0,z1,gr1,gr2,in,att1,att2,att3,att4,att5,att6;
  
void setup(){
   Serial.begin(9600);Wire.begin();irrecv.enableIRIn(); // запускаем модуль IR
   lcd.begin(16, 2);
   pinMode(13,INPUT);// КНОПКА ЭНКОДЕРA
   MsTimer2::set(3, to_Timer);MsTimer2::start();
   lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
   lcd.setCursor(0,0);lcd.print("    TDA 7448    ");
   lcd.setCursor(0,1);lcd.print("    PT  2323    ");
   delay(1000);cl();
   if(EEPROM.read(100)!=0){for(i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
   vol = EEPROM.read(0)-79;in = EEPROM.read(1);
   att1 = EEPROM.read(11);att2 = EEPROM.read(12);att3 = EEPROM.read(13);att4 = EEPROM.read(14);att5 = EEPROM.read(15);att6 = EEPROM.read(16);
   audio_tda();audio_pt();
}

void loop(){
  if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);times=millis();w=1;w1=1;irrecv.resume();}// IR приемник
  if(ir.value==0){gr1=0;gr2=0;}
  if(digitalRead(13)==LOW&&menu!=100){menu++;x++;cl();myEnc.write(0);times=millis();w=1;w1=1;if(menu>1){menu=0;}}// меню
  if(x>5){menu1=1;menu=100;lcd.setCursor(1,0);lcd.print("ATTENUATOR");delay(2000);}
  if(digitalRead(13)==HIGH){x=0;}
  if(digitalRead(13)==LOW&&menu==100){menu1++;cl();myEnc.write(0);times=millis();w=1;w1=1;if(menu1>6){menu1=1;}}
  
  if(ir.value==IR_8){menu++;gr1=0;gr2=0;cl();times=millis();w=1;w1=1;if(menu>1){menu=0;}}// меню 

 //////////////////// VOLUME ///////////////////////////////////////////////////////////////////////////////////////
 if(menu==0){
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка >>>>>>
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка <<<<<<
  
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   vol=vol+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;vol_func();audio_tda();audio_pt();}
  lcd.setCursor(0,0);lcd.print("VOLUME  ");
  lcd.print(" ");lcd.print(vol);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol_d=vol+48;
    if(w1==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);}w1=0;}}

 /////////////////// INPUT //////////////////////////////////////////////////////////////////////////////////////// 
  if(menu==1){
     if(ir.value==IR_3){in++;gr1=1;gr2=0;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){in++;gr2=0;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка >>>>>>
     if(ir.value==IR_4){in--;gr1=0;gr2=1;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){in--;gr1=0;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка <<<<<<
    
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   in=in+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;in_func();audio_tda();audio_pt();}
 lcd.setCursor(0,0);lcd.print("INPUT  ");
 switch(in){ // пропишите свои названия входов
      case 0: lcd.print("sr_sl  "); break;
      case 1: lcd.print("mp3    "); break;
      case 2: lcd.print("blutuch"); break;
      case 3: lcd.print("radio  "); break;
      case 4: lcd.print("stereo "); break;}}


///////////////////////////////////// Att //////////////////////////////////////////
 
 if(menu1==1){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att1=att1+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att1>20){att1=20;}if(att1<0){att1=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("RF  ");lcd.print(-att1);lcd.print(" dB     ");
 }

  if(menu1==2){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att2=att2+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att2>20){att2=20;}if(att2<0){att2=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("LF  ");lcd.print(-att2);lcd.print(" dB     ");
 }

  if(menu1==3){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att3=att3+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att3>20){att3=20;}if(att3<0){att3=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("RR  ");lcd.print(-att3);lcd.print(" dB     ");
 }

  if(menu1==4){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att4=att4+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att4>20){att4=20;}if(att4<0){att4=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("LR  ");lcd.print(-att4);lcd.print(" dB     ");
 }

  if(menu1==5){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att5=att5+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att5>20){att5=20;}if(att5<0){att5=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("CT  ");lcd.print(-att5);lcd.print(" dB     ");
 }

  if(menu1==6){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att6=att6+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att6>20){att6=20;}if(att6<0){att6=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("SUB ");lcd.print(-att6);lcd.print(" dB    ");
 }

 ///////////////// EEPROM ///////////////////////////////////////////////////////////////////////////////////////
 if(millis()-times>10000 && w==1){
     EEPROM.update(0,vol+79);
     EEPROM.update(1,in);
     EEPROM.update(11,att1);EEPROM.update(12,att2);EEPROM.update(13,att3);EEPROM.update(14,att4);EEPROM.update(15,att5);EEPROM.update(16,att6);
     menu=0;cl();w=0,w1=1;menu1=0;}
  
}//loop

void in_func(){if(in<0){in=4;}if(in>4){in=0;}}
void vol_func(){if(vol>0){vol=0;}if(vol<-79){vol=-79;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(100);}
void audio_pt(){
  pt.setInput(in); // входы 1...4 (0...3) или 6 моно (4)
  pt.setMute(0,0,0,0,0,0,0); 
  pt.setFeature(0,1); // дополнительные функции 0...3
                     // 0 - Enhanced Surround Function Active
                     // 1 - Enhanced Surround Function Disabled
                     // 0 - Mixed Channel (0dB) Setup
                     // 1 - Mixed Channel (+6dB) Setup 
}
void audio_tda(){
  tda.setAtt(1,vol-att1);// 0 макс громк, -79(79) мин громк
  tda.setAtt(2,vol-att2);
  tda.setAtt(3,vol-att3);
  tda.setAtt(4,vol-att4);
  tda.setAtt(5,vol-att5);
  tda.setAtt(6,vol-att6);
  }

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

39

Re: PT2323+TDA7448

поздняк метаться(((((( я по моему дисплей спалил)))))))))))))))))))заказал новый но он придет только через 2 недели....а на этом символы при прокручивании энкодера куда то исчезают((((((а тебе огромное спасибо,и сделай в форуме заголовок пожертвования,такой труд должен вознагрождаться)

40

Re: PT2323+TDA7448

Такой экран сложно спалить, возможно где-то шину данных замкнуло или провод отвалился.

41

Re: PT2323+TDA7448

да вот в том то и прикол....заливаю скетч все показывает,только прокручиваю энкодер и все исчезает либо превращается в кракозябру, пробывал другую ардуинку тоже самое, подумал энкодер....выпаял еще парочку с старых схем...такая же бадяга...просмотрел все контакты что бы нигде не мкнуло....прочистил все от флюса....ничего не помогает....пришел к выводу что сам контроллер дисплея навернулся...если он там конечно есть.....

42

Re: PT2323+TDA7448

В какой момент все это началось, что делали со схемой?

43

Re: PT2323+TDA7448

блин))))))))))))) да ты просто гений))))в 20 раз стал смотреть что не так) и заметил что на одной ардуинке что на второй...между ножками процессора остался флюс...заметен только с лупой....взял одеколон и стал тереть зубной щеткой))))) и все прокатило)))))ты второй раз его оживил))))))))

44

Re: PT2323+TDA7448

Доброго времени суток всем отметившимся в данной теме! Большое спасибо, с вашей помощью колонки обрели новую жизнь.
Хотелось бы довести до ума некоторые моменты:
1. Не могли бы вы подсказать, как добавить функцию "mute" (с пульта)?
2. Громкость в непонятных простой домохозяйке децибелах, как сделать отображение в процентах?)
3. При раздельной поканальной регулировке громкости энкодер работает наоборот - при поворачивании по часовой стрелке громкость убавляется.
Заранее спасибо!

45

Re: PT2323+TDA7448

Опубликуйте Ваш скетч.
Громкость в процентах лучше не делать, будет несовпадение процентов и дБ, при повороте энкодера в каких то местах значение процента меняться не будет. Лучше сделать просто числовой, например 0 мин громкость, 79 макс

46 (2022-01-06 21:09:12 отредактировано Dapox11)

Re: PT2323+TDA7448

А мой скетч целиком повторяет Ваш) Только поправил названия каналов на раздельной поканальной регулировке громкости и добавил свой пульт.

#define IR_8 0xFF21DE // Кнопка MENU (input sel)
#define IR_3 0xFF09F6 // Кнопка > (vol+)
#define IR_4 0xFF29D6 // Кнопка < (vol-)

#include <Wire.h> 
#include <PT2323.h>
#include <TDA7448.h> 
#include <Encoder.h>
#include <EEPROM.h>
#include <MsTimer2.h>
#include <boarddefs.h>
#include <IRremote.h>
#include <LiquidCrystal.h>
  TDA7448 tda;
  PT2323 pt; 
 IRrecv irrecv(10); // указываем вывод модуля IR приемника
 decode_results ir;
 LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 подключение LCD
 Encoder myEnc(9, 8);//CLK, DT подключение энкодера
   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 newPosition,times,oldPosition  = -999;
  int x,i,w,w1,menu,menu1=0,vol,vol_d,z,z0,z1,gr1,gr2,in,att1,att2,att3,att4,att5,att6;
  
void setup(){
   Serial.begin(9600);Wire.begin();irrecv.enableIRIn(); // запускаем модуль IR
   lcd.begin(16, 2);
   pinMode(13,INPUT);// КНОПКА ЭНКОДЕРA
   MsTimer2::set(3, to_Timer);MsTimer2::start();
   lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
   lcd.setCursor(0,0);lcd.print("    TDA 7448    ");
   lcd.setCursor(0,1);lcd.print("    PT  2323    ");
   delay(1000);cl();
   if(EEPROM.read(100)!=0){for(i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
   vol = EEPROM.read(0)-79;in = EEPROM.read(1);
   att1 = EEPROM.read(11);att2 = EEPROM.read(12);att3 = EEPROM.read(13);att4 = EEPROM.read(14);att5 = EEPROM.read(15);att6 = EEPROM.read(16);
   audio_tda();audio_pt();
}

void loop(){
  if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);times=millis();w=1;w1=1;irrecv.resume();}// IR приемник
  if(ir.value==0){gr1=0;gr2=0;}
  if(digitalRead(13)==HIGH&&menu!=100){menu++;x++;cl();myEnc.write(0);times=millis();w=1;w1=1;if(menu>1){menu=0;}}// меню
  if(x>5){menu1=1;menu=100;lcd.setCursor(1,0);lcd.print("ATTENUATOR");delay(2000);}
  if(digitalRead(13)==LOW){x=0;}
  if(digitalRead(13)==HIGH&&menu==100){menu1++;cl();myEnc.write(0);times=millis();w=1;w1=1;if(menu1>6){menu1=1;}}
  
  if(ir.value==IR_8){menu++;gr1=0;gr2=0;cl();times=millis();w=1;w1=1;if(menu>1){menu=0;}}// меню 

 //////////////////// VOLUME ///////////////////////////////////////////////////////////////////////////////////////
 if(menu==0){
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка >>>>>>
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка <<<<<<
  
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   vol=vol+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;vol_func();audio_tda();audio_pt();}
  lcd.setCursor(0,0);lcd.print("VOLUME  ");
  lcd.print(" ");lcd.print(vol);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol_d=vol+48;
    if(w1==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);}w1=0;}}

 /////////////////// INPUT //////////////////////////////////////////////////////////////////////////////////////// 
  if(menu==1){
     if(ir.value==IR_3){in++;gr1=1;gr2=0;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){in++;gr2=0;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка >>>>>>
     if(ir.value==IR_4){in--;gr1=0;gr2=1;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){in--;gr1=0;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка <<<<<<
    
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   in=in+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;in_func();audio_tda();audio_pt();}
 lcd.setCursor(0,0);lcd.print("INPUT  ");
 switch(in){ // пропишите свои названия входов
      case 0: lcd.print("AUX  "); break;
      case 1: lcd.print("mp3    "); break;
      case 2: lcd.print("Bluetooth"); break;
      case 3: lcd.print("radio  "); break;
      case 4: lcd.print("stereo "); break;}}


///////////////////////////////////// Att //////////////////////////////////////////
 
 if(menu1==1){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att1=att1+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att1>20){att1=20;}if(att1<0){att1=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("FL  ");lcd.print(-att1);lcd.print(" dB     ");
 }

  if(menu1==2){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att2=att2+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att2>20){att2=20;}if(att2<0){att2=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("FR  ");lcd.print(-att2);lcd.print(" dB     ");
 }

  if(menu1==3){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att3=att3+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att3>20){att3=20;}if(att3<0){att3=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("CT  ");lcd.print(-att3);lcd.print(" dB     ");
 }

  if(menu1==4){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att4=att4+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att4>20){att4=20;}if(att4<0){att4=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("SUB ");lcd.print(-att4);lcd.print(" dB     ");
 }

  if(menu1==5){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att5=att5+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att5>20){att5=20;}if(att5<0){att5=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("SL  ");lcd.print(-att5);lcd.print(" dB     ");
 }

  if(menu1==6){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att6=att6+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att6>20){att6=20;}if(att6<0){att6=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("SR ");lcd.print(-att6);lcd.print(" dB    ");
 }

 ///////////////// EEPROM ///////////////////////////////////////////////////////////////////////////////////////
 if(millis()-times>10000 && w==1){
     EEPROM.update(0,vol+79);
     EEPROM.update(1,in);
     EEPROM.update(11,att1);EEPROM.update(12,att2);EEPROM.update(13,att3);EEPROM.update(14,att4);EEPROM.update(15,att5);EEPROM.update(16,att6);
     menu=0;cl();w=0,w1=1;menu1=0;}
  
}//loop

void in_func(){if(in<0){in=4;}if(in>4){in=0;}}
void vol_func(){if(vol>0){vol=0;}if(vol<-79){vol=-79;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(100);}
void audio_pt(){
  pt.setInput(in); // входы 1...4 (0...3) или 6 моно (4)
  pt.setMute(0,0,0,0,0,0,0); 
  pt.setFeature(0,1); // дополнительные функции 0...3
                     // 0 - Enhanced Surround Function Active
                     // 1 - Enhanced Surround Function Disabled
                     // 0 - Mixed Channel (0dB) Setup
                     // 1 - Mixed Channel (+6dB) Setup 
}
void audio_tda(){
  tda.setAtt(1,vol-att1);// 0 макс громк, -79(79) мин громк
  tda.setAtt(2,vol-att2);
  tda.setAtt(3,vol-att3);
  tda.setAtt(4,vol-att4);
  tda.setAtt(5,vol-att5);
  tda.setAtt(6,vol-att6);
  }

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

47

Re: PT2323+TDA7448

Функция mute на данной акустике реализована средствами самого усилителя - надо на определенный контакт подать 5 вольт. Т.е для реализации mute надо чтобы с одной и той же кнопки пульта у ардуинки с какого-нибудь контакта появлялось и пропадало напряжение

ps перепутал темы, изначально не там написал)

48

Re: PT2323+TDA7448

Я не могу сейчас сам все протестировать, поэтому тестировать придется Вам, проверьте режим MUTE

D11 - выход управления MUTE

#define IR_8 0xFF21DE // Кнопка MENU (input sel)
#define IR_3 0xFF09F6 // Кнопка > (vol+)
#define IR_4 0xFF29D6 // Кнопка < (vol-)
#define MUTE 0x0000000 // Кнопка MUTE

#include <Wire.h> 
#include <PT2323.h>
#include <TDA7448.h> 
#include <Encoder.h>
#include <EEPROM.h>
#include <MsTimer2.h>
#include <boarddefs.h>
#include <IRremote.h>
#include <LiquidCrystal.h>
  TDA7448 tda;
  PT2323 pt; 
 IRrecv irrecv(10); // указываем вывод модуля IR приемника
 decode_results ir;
 LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 подключение LCD
 Encoder myEnc(9, 8);//CLK, DT подключение энкодера
   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 newPosition,times,oldPosition  = -999;
  int x,i,w,w1,menu,menu1=0,vol,vol_d,z,z0,z1,gr1,gr2,in,att1,att2,att3,att4,att5,att6;
  bool mute;
  
void setup(){
   Serial.begin(9600);Wire.begin();irrecv.enableIRIn(); // запускаем модуль IR
   lcd.begin(16, 2);
   pinMode(13,INPUT);// КНОПКА ЭНКОДЕРA
   pinMode(11,OUTPUT); // выход управления MUTE
   MsTimer2::set(3, to_Timer);MsTimer2::start();
   lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
   lcd.setCursor(0,0);lcd.print("    TDA 7448    ");
   lcd.setCursor(0,1);lcd.print("    PT  2323    ");
   delay(1000);cl();
   if(EEPROM.read(100)!=0){for(i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
   vol = EEPROM.read(0)-79;in = EEPROM.read(1);
   att1 = EEPROM.read(11);att2 = EEPROM.read(12);att3 = EEPROM.read(13);att4 = EEPROM.read(14);att5 = EEPROM.read(15);att6 = EEPROM.read(16);
   audio_tda();audio_pt();
}

void loop(){
  if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);times=millis();w=1;w1=1;irrecv.resume();}// IR приемник
  if(ir.value==0){gr1=0;gr2=0;}
  if(mute==0){
  if(digitalRead(13)==HIGH&&menu!=100){menu++;x++;cl();myEnc.write(0);times=millis();w=1;w1=1;if(menu>1){menu=0;}}// меню
  if(x>5){menu1=1;menu=100;lcd.setCursor(1,0);lcd.print("ATTENUATOR");delay(2000);}
  if(digitalRead(13)==LOW){x=0;}
  if(digitalRead(13)==HIGH&&menu==100){menu1++;cl();myEnc.write(0);times=millis();w=1;w1=1;if(menu1>6){menu1=1;}}
  
  if(ir.value==IR_8){menu++;gr1=0;gr2=0;cl();times=millis();w=1;w1=1;if(menu>1){menu=0;}}// меню 
  }
  if(ir.value==MUTE&&mute==0){mute=1;gr1=0;gr2=0;cl1();menu=100;menu1=0;lcd.setCursor(6,0);lcd.print("MUTE");digitalWrite(11,HIGH);}
  if(ir.value==MUTE&&mute==1){mute=0;gr1=0;gr2=0;cl1();menu=0;digitalWrite(11,LOW);} 
  
 //////////////////// VOLUME ///////////////////////////////////////////////////////////////////////////////////////
 if(menu==0){
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка >>>>>>
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка <<<<<<
  
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   vol=vol+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;vol_func();audio_tda();audio_pt();}
  lcd.setCursor(0,0);lcd.print("VOLUME  ");
  lcd.print(" ");lcd.print(vol);lcd.print(" ");lcd.setCursor(13,0);lcd.print("dB");vol_d=vol+48;
    if(w1==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);}w1=0;}}

 /////////////////// INPUT //////////////////////////////////////////////////////////////////////////////////////// 
  if(menu==1){
     if(ir.value==IR_3){in++;gr1=1;gr2=0;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){in++;gr2=0;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка >>>>>>
     if(ir.value==IR_4){in--;gr1=0;gr2=1;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){in--;gr1=0;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка <<<<<<
    
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   in=in+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;in_func();audio_tda();audio_pt();}
 lcd.setCursor(0,0);lcd.print("INPUT  ");
 switch(in){ // пропишите свои названия входов
      case 0: lcd.print("AUX  "); break;
      case 1: lcd.print("mp3    "); break;
      case 2: lcd.print("Bluetooth"); break;
      case 3: lcd.print("radio  "); break;
      case 4: lcd.print("stereo "); break;}}


///////////////////////////////////// Att //////////////////////////////////////////
 
 if(menu1==1){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att1=att1+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att1>20){att1=20;}if(att1<0){att1=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("FL  ");lcd.print(-att1);lcd.print(" dB     ");
 }

  if(menu1==2){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att2=att2+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att2>20){att2=20;}if(att2<0){att2=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("FR  ");lcd.print(-att2);lcd.print(" dB     ");
 }

  if(menu1==3){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att3=att3+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att3>20){att3=20;}if(att3<0){att3=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("CT  ");lcd.print(-att3);lcd.print(" dB     ");
 }

  if(menu1==4){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att4=att4+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att4>20){att4=20;}if(att4<0){att4=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("SUB ");lcd.print(-att4);lcd.print(" dB     ");
 }

  if(menu1==5){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att5=att5+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att5>20){att5=20;}if(att5<0){att5=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("SL  ");lcd.print(-att5);lcd.print(" dB     ");
 }

  if(menu1==6){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att6=att6+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att6>20){att6=20;}if(att6<0){att6=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("SR ");lcd.print(-att6);lcd.print(" dB    ");
 }

 ///////////////// EEPROM ///////////////////////////////////////////////////////////////////////////////////////
 if(millis()-times>10000 && w==1){
     EEPROM.update(0,vol+79);
     EEPROM.update(1,in);
     EEPROM.update(11,att1);EEPROM.update(12,att2);EEPROM.update(13,att3);EEPROM.update(14,att4);EEPROM.update(15,att5);EEPROM.update(16,att6);
     menu=0;cl();w=0,w1=1;menu1=0;}
  
}//loop

void in_func(){if(in<0){in=4;}if(in>4){in=0;}}
void vol_func(){if(vol>0){vol=0;}if(vol<-79){vol=-79;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(100);}
void audio_pt(){
  pt.setInput(in); // входы 1...4 (0...3) или 6 моно (4)
  pt.setMute(0,0,0,0,0,0,0); 
  pt.setFeature(0,1); // дополнительные функции 0...3
                     // 0 - Enhanced Surround Function Active
                     // 1 - Enhanced Surround Function Disabled
                     // 0 - Mixed Channel (0dB) Setup
                     // 1 - Mixed Channel (+6dB) Setup 
}
void audio_tda(){
  tda.setAtt(1,vol-att1);// 0 макс громк, -79(79) мин громк
  tda.setAtt(2,vol-att2);
  tda.setAtt(3,vol-att3);
  tda.setAtt(4,vol-att4);
  tda.setAtt(5,vol-att5);
  tda.setAtt(6,vol-att6);
  }

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

49

Re: PT2323+TDA7448

Регулировка громкости 0...79 единиц? Или делать в процентах?

50

Re: PT2323+TDA7448

Да, все работает, на контакте 11 появляется и пропадает 5 вольт. Так же разобрался с индикацией громкости, будет просто в единицах.

Остается вопрос с регулировкой аттенюатора. Чтобы убавить громкость канала приходится крутить по часовой стрелке (как бы прибавляя)

И еще подскажите, где поправить код, чтобы при регулировке громкости черточки рисовались с нужного мне значения. По умолчанию первая черточка появляется при уровне громкости 32 (-47 dB)

#define IR_8 0xFF21DE // Кнопка MENU (input sel)
#define IR_3 0xFF09F6 // Кнопка > (vol+)
#define IR_4 0xFF29D6 // Кнопка < (vol-)
#define MUTE 0xFF41BE // Кнопка MUTE

#include <Wire.h> 
#include <PT2323.h>
#include <TDA7448.h> 
#include <Encoder.h>
#include <EEPROM.h>
#include <MsTimer2.h>
#include <boarddefs.h>
#include <IRremote.h>
#include <LiquidCrystal.h>
  TDA7448 tda;
  PT2323 pt; 
 IRrecv irrecv(10); // указываем вывод модуля IR приемника
 decode_results ir;
 LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7 подключение LCD
 Encoder myEnc(9, 8);//CLK, DT подключение энкодера
   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 newPosition,times,oldPosition  = -999;
  int x,i,w,w1,menu,menu1=0,vol,vol_d,z,z0,z1,gr1,gr2,in,att1,att2,att3,att4,att5,att6;
  bool mute;
  
void setup(){
   Serial.begin(9600);Wire.begin();irrecv.enableIRIn(); // запускаем модуль IR
   lcd.begin(16, 2);
   pinMode(13,INPUT);// КНОПКА ЭНКОДЕРA
   pinMode(11,OUTPUT); // выход управления MUTE
   MsTimer2::set(3, to_Timer);MsTimer2::start();
   lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
   lcd.setCursor(0,0);lcd.print("    TDA 7448    ");
   lcd.setCursor(0,1);lcd.print("    PT  2323    ");
   delay(1000);cl();
   if(EEPROM.read(100)!=0){for(i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
   vol = EEPROM.read(0)-79;in = EEPROM.read(1);
   att1 = EEPROM.read(11);att2 = EEPROM.read(12);att3 = EEPROM.read(13);att4 = EEPROM.read(14);att5 = EEPROM.read(15);att6 = EEPROM.read(16);
   audio_tda();audio_pt();
}

void loop(){
  if ( irrecv.decode( &ir )) {Serial.print("0x");Serial.println( ir.value,HEX);times=millis();w=1;w1=1;irrecv.resume();}// IR приемник
  if(ir.value==0){gr1=0;gr2=0;}
  if(mute==0){
  if(digitalRead(13)==HIGH&&menu!=100){menu++;x++;cl();myEnc.write(0);times=millis();w=1;w1=1;if(menu>1){menu=0;}}// меню
  if(x>5){menu1=1;menu=100;lcd.setCursor(1,0);lcd.print("ATTENUATOR");delay(2000);}
  if(digitalRead(13)==LOW){x=0;}
  if(digitalRead(13)==HIGH&&menu==100){menu1++;cl();myEnc.write(0);times=millis();w=1;w1=1;if(menu1>6){menu1=1;}}
  
  if(ir.value==IR_8){menu++;gr1=0;gr2=0;cl();times=millis();w=1;w1=1;if(menu>1){menu=0;}}// меню 
  }
  if(ir.value==MUTE&&mute==0){mute=1;gr1=0;gr2=0;cl1();menu=100;menu1=0;lcd.setCursor(6,0);lcd.print("MUTE");digitalWrite(11,HIGH);}
  if(ir.value==MUTE&&mute==1){mute=0;gr1=0;gr2=0;cl1();menu=0;digitalWrite(11,LOW);} 
  
 //////////////////// VOLUME ///////////////////////////////////////////////////////////////////////////////////////
 if(menu==0){
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка >>>>>>
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w1=1;vol_func();audio_tda();audio_pt();}// кнопка <<<<<<
  
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   vol=vol+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;vol_func();audio_tda();audio_pt();}
  lcd.setCursor(0,0);lcd.print("  VOLUME  ");
  lcd.print("  ");lcd.print(79+vol);lcd.print(" ");lcd.setCursor(14,0);lcd.print("  ");vol_d=vol+48;
    if(w1==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);}w1=0;}}

 /////////////////// INPUT //////////////////////////////////////////////////////////////////////////////////////// 
  if(menu==1){
     if(ir.value==IR_3){in++;gr1=1;gr2=0;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){in++;gr2=0;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка >>>>>>
     if(ir.value==IR_4){in--;gr1=0;gr2=1;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){in--;gr1=0;cl1();w1=1;in_func();audio_tda();audio_pt();}// кнопка <<<<<<
    
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   in=in+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;in_func();audio_tda();audio_pt();}
 lcd.setCursor(0,0);lcd.print("INPUT  ");
 switch(in){ // пропишите свои названия входов
      case 0: lcd.print("   AUX   "); break;
      case 1: lcd.print("   mp3   "); break;
      case 2: lcd.print("Bluetooth"); break;
      case 3: lcd.print("  radio  "); break;
      case 4: lcd.print(" - 5.1 - "); break;}}


///////////////////////////////////// Att //////////////////////////////////////////
 
 if(menu1==1){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att1=att1+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att1>20){att1=20;}if(att1<0){att1=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("FL  ");lcd.print(-att1);lcd.print(" dB     ");
 }

  if(menu1==2){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att2=att2+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att2>20){att2=20;}if(att2<0){att2=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("FR  ");lcd.print(-att2);lcd.print(" dB     ");
 }

  if(menu1==3){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att3=att3+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att3>20){att3=20;}if(att3<0){att3=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("CT  ");lcd.print(-att3);lcd.print(" dB     ");
 }

  if(menu1==4){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att4=att4+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att4>20){att4=20;}if(att4<0){att4=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("SUB ");lcd.print(-att4);lcd.print(" dB     ");
 }

  if(menu1==5){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att5=att5+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att5>20){att5=20;}if(att5<0){att5=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("SL  ");lcd.print(-att5);lcd.print(" dB     ");
 }

  if(menu1==6){
   if (newPosition != oldPosition) {
   oldPosition = newPosition;
   att6=att6+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w1=1;if(att6>20){att6=20;}if(att6<0){att6=0;}audio_tda();audio_pt();}
   lcd.setCursor(1,0);lcd.print("ATTENUATOR");
   lcd.setCursor(1,1);lcd.print("SR ");lcd.print(-att6);lcd.print(" dB    ");
 }

 ///////////////// EEPROM ///////////////////////////////////////////////////////////////////////////////////////
 if(millis()-times>10000 && w==1){
     EEPROM.update(0,vol+79);
     EEPROM.update(1,in);
     EEPROM.update(11,att1);EEPROM.update(12,att2);EEPROM.update(13,att3);EEPROM.update(14,att4);EEPROM.update(15,att5);EEPROM.update(16,att6);
     menu=0;cl();w=0,w1=1;menu1=0;}
  
}//loop

void in_func(){if(in<0){in=4;}if(in>4){in=0;}}
void vol_func(){if(vol>0){vol=0;}if(vol<-79){vol=-79;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(100);}
void audio_pt(){
  pt.setInput(in); // входы 1...4 (0...3) или 6 моно (4)
  pt.setMute(0,0,0,0,0,0,0); 
  pt.setFeature(0,1); // дополнительные функции 0...3
                     // 0 - Enhanced Surround Function Active
                     // 1 - Enhanced Surround Function Disabled
                     // 0 - Mixed Channel (0dB) Setup
                     // 1 - Mixed Channel (+6dB) Setup 
}
void audio_tda(){
  tda.setAtt(1,vol-att1);// 0 макс громк, -79(79) мин громк
  tda.setAtt(2,vol-att2);
  tda.setAtt(3,vol-att3);
  tda.setAtt(4,vol-att4);
  tda.setAtt(5,vol-att5);
  tda.setAtt(6,vol-att6);
  }

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