126

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

http://forum.rcl-radio.ru/viewtopic.php?pid=228#p228

127

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

O'k. Спасибо. Попробуем разобраться. Под MUTE надо будет библиотеку подшаманить. Сделаю, отпишусь.

128 (2021-02-21 18:02:27 отредактировано VADA)

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

И снова здравствуйте.
Проблемму с POWER через кнопку энкодера решил, опять же через ж---(тернии к звездам), из за недостатка серого вещества. При отключении с кнопки моргает надпись STANDBY, судя по всему продолжается выполнение
if((digitalRead(15)==HIGH)&&power==0){i=0;}if(i>3){power=1;mute=1;audio();cl();lcd.setCursor(0,0);lcd.print("    STANDBY   ");cl();menu=100;audio();delay(700);}
хотя присутствует &&power==0, а, по идее, power=1;.
Заметил по изменению задержки моргания надписи "    STANDBY   " в зависимости от delay(700);.

С пульта все отрабатывает нормально.

Включение работает
if((digitalRead(15))==LOW&&power==1){power=0;mute=0;audio();gr1=0;gr2=0;cl);
menu=0;time=millis();w=1;w2=1;i++;myEnc.write(0);delay(500);lcd.clear();}

//http://rcl-radio.ru/?p=58563

#define IR_1 0xFD50AF // Кнопка вверх
#define IR_2 0xFDCA35 // Кнопка вниз
#define IR_3 0xFD7887 // Кнопка >
#define IR_4 0xFD4AB5 // Кнопка <
#define IR_5 0xFD18E7 // Кнопка IN
#define IR_6 0xFD629D // Кнопка MUTE
#define IR_7 0xFD28D7 // Кнопка POWER


#include <Wire.h>
#include <MsTimer2.h>
#include <LiquidCrystal.h>
#include <Encoder.h>
#include <EEPROM.h>
#include <TDA7313.h>
#include <boarddefs.h>
#include <IRremote.h>
  IRrecv irrecv(10); // указываем вывод модуля IR приемника
  TDA7313 tda;
  decode_results ir;
  Encoder myEnc(3, 2);//CLK, DT подключение энкодера
  LiquidCrystal lcd(8, 9, 4, 5, 6, 7);// RS,E,D4,D5,D6,D7 подключение LCD
   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,time,time1,oldPosition  = -999;
   int vol,w1,w2=1,gr1,gr2,vol_d,menu,w,z,z0,z1,bass_d,bass,treb_d,treb,i,loud,in,mute,power,gain,gain1,gain2,gain3,lr,rr,lf,rf;

void setup(){ 
   Serial.begin(9600);
   Wire.begin();irrecv.enableIRIn(); // запускаем модуль I2C,IR
   lcd.begin(16, 2);lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
   pinMode(15,INPUT);// КНОПКА ЭНКОДЕРA
   pinMode(14,INPUT_PULLUP);// КНОПКА IN
   pinMode(16,INPUT_PULLUP);// КНОПКА MUTE
   pinMode(12,OUTPUT);//Питание для источника   
   pinMode(13,OUTPUT);//Питание STANDBY
   
    MsTimer2::set(3, to_Timer);MsTimer2::start();
    vol = EEPROM.read(0);bass = EEPROM.read(1)-7;treb = EEPROM.read(2)-7;in = EEPROM.read(3);
    gain1 = EEPROM.read(4);gain2 = EEPROM.read(5);gain3 = EEPROM.read(6);loud = EEPROM.read(7);
    lr = EEPROM.read(8);rr = EEPROM.read(9);lf = EEPROM.read(10);rf = EEPROM.read(11);
    if(in==0){gain=gain1;}
    if(in==1){gain=gain2;}
    if(in==2){gain=gain3;}
    lcd.setCursor(0,0);lcd.print("TDA7313 IR POWER");
    lcd.setCursor(3,1);lcd.print("  Ver. 1  ");
    delay(2000);audio();
    lcd.clear();}
   void to_Timer(){newPosition = myEnc.read()/4;}
 
void loop(){
//KEY  
//MENU
   if(digitalRead(15)==LOW&&power==0){menu++;cl();myEnc.write(0);i++;time=millis();
   w=1;w2=1;if(menu>5){menu=0;}}// меню
//INPUT   
   if(digitalRead(14)==LOW&&power==0&&mute==0){in++;;cl();myEnc.write(0);time=millis();
   w=1;w2=1;if(in>2){in=0;};audio();}// КНОПКА ВЫБОРА ВХОДА IN
//MUTE
//   if(digitalRead(6)==LOW&&mute==0&&power==0){mute=1;cl();w=0;w2=1;lcd.print("      MUTE     ");menu=100;audio();}// mute on
//   if(digitalRead(6)==LOW&&mute==1&&power==0){mute=0;cl();time=millis();w=1;w2=1;menu=0;myEnc.write(0);audio();}// mute off
//POWER  
   if((digitalRead(15)==HIGH)&&power==0){i=0;}if(i>3){power=1;mute=1;audio();
//   cl();
   lcd.setCursor(0,0);lcd.print("    STANDBY   ");cl();menu=100;audio();delay(700);}// power off
   if((digitalRead(15))==LOW&&power==1){power=0;mute=0;audio();gr1=0;gr2=0;cl();
   menu=0;time=millis();w=1;w2=1;i++;myEnc.write(0);delay(500);lcd.clear();}// power on
//LED   
   if(in==1&&power==0){digitalWrite(12,HIGH);}else{digitalWrite(12,LOW);} // INPUT POWER
   if(power==0){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);} // выход STANDBY

// IR приемник  
  if ( irrecv.decode( &ir )){
  Serial.print("0x");Serial.println( ir.value,HEX);
  time1=millis();time=millis();
  
  w=1;w1=1;irrecv.resume();}
//POWER     
     if(ir.value==IR_7&&power==0){power=1;mute=1;audio();gr1=0;gr2=0;cl();
     lcd.setCursor(0,0);lcd.print("    STANDBY   ");w=0;menu=100;delay(700);}// power off
     if(ir.value==IR_7&&power==1){power=0;mute=0;audio();gr1=0;gr2=0;cl();
     menu=0;time=millis();w=1;w2=1;myEnc.write(0);delay(500);
//     lcd.clear();
     }// power on
//MENU UP/DOWN     
     if(ir.value==IR_1&&power==0){menu++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
     if(menu>4){menu=0;}}// меню кнопка вверх
     if(ir.value==IR_2&&power==0){menu--;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
     if(menu<0){menu=4;}}// меню кнопка вниз
//INPUT     
     if(ir.value==IR_5&&power==0){in++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
     if(in>2){in=0;}audio();//  кнопка IN    
//MUTE
     if(ir.value==IR_6&&mute==0&&power==0){mute=1;gr1=0;gr2=0;cl();w=0;w2=1;
     lcd.print("      MUTE     ");menu=100;audio();}// mute on
     if(ir.value==IR_6&&mute==1&&power==0){mute=0;gr1=0;gr2=0;cl();
     time=millis();w=1;w2=1;menu=0;myEnc.write(0);audio();}// mute off
     }

//////////////////////////////////////// Volume 0...63 дБ ////////////////////////////////////
 if(menu==0){     
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w2=1;
     if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w2=1;
     if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка >>>>>>
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w2=1;
     if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w2=1;
     if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка <<<<<<
   
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;
    if(vol>63){vol=63;}if(vol<0){vol=0;}audio();}
   
   lcd.setCursor(0,0);lcd.print("Volume ");
   lcd.print(-78.75+(float)vol*1.25,0);
   lcd.print(" ");
   lcd.setCursor(10,0);lcd.print("dB IN");lcd.print(in+1);
   vol_d=vol-15;
   
//   lcd.setCursor(13,0);lcd.print("IN");lcd.print(in+1);
   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;}}
//////////////////////////////////////////////////////////////////////////////////////////////

 /////////////////////// индикация тембр НЧ -14...14 дБ //////////////////////////////////////
   if(menu==1){   
     if(ir.value==IR_3){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){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;}}
////////////////////////////////////////////////////////////////////////////////////////////////
 
 /////////////////////// индикация тембр ВЧ -14...14 дБ ////////////////////////////////////////
   if(menu==2){   
   if(ir.value==IR_3){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){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;}}

 ///////////////////////////////////// BALANCE //////////////////////////////////////////////
   if(menu==3){
    if(ir.value==IR_3){lf++;lr++;rf--;rr--;cl1();
    lcd.clear();w=1;//кнопка >
    if(lf>10){lf=10;}if(rf<0){rf=0;}if(lr>10){lr=10;}if(rr<0){rr=0;}audio();}

    if(ir.value==IR_4){lf--;lr--;rf++;rr++;cl1();
    lcd.clear();w=1;//кнопка <
    if(lf<0){lf=0;}if(rf>10){rf=10;}if(lr<0){lr=0;}if(rr>10){rr=10;}audio();}
    
    if (newPosition != oldPosition){
    oldPosition = newPosition;
    lf=lf+newPosition;lr=lr+newPosition;rf=rf-newPosition;rr=rr-newPosition;myEnc.write(0);newPosition=0;
    lcd.clear();time=millis();w=1;
    if(lf>10){lf=10;}if(lf<0){lf=0;}if(rf>10){rf=10;}if(rf<0){rf=0;}
    if(lr>10){lr=10;}if(lr<0){lr=0;}if(rr>10){rr=10;}if(rr<0){rr=0;}
    audio();} 

   lcd.setCursor(0,0);
   if(lf-5>=0){lcd.print("-");}else{lcd.print("+");}
   lcd.print(abs(rf-5));lcd.print(" dB ");
   lcd.print(" <>  ");
   if(rf-5>=0){lcd.print("-");}else{lcd.print("+");}
   lcd.print(abs(rf-5));lcd.print(" dB ");
   lcd.setCursor(0,1);lcd.print("L");
   lcd.setCursor(15,1);lcd.print("R");  
   if(lf-5<0){lcd.setCursor(lf-5+7,1);lcd.write((uint8_t)0);}
   if(lf-5>0){lcd.setCursor(lf-5+8,1);lcd.write((uint8_t)0);}
   if(lf-5==0){lcd.setCursor(7,1);lcd.write((uint8_t)0);lcd.setCursor(8,1);lcd.write((uint8_t)0);w2=0;}
   }
/////////////////////////////////// LOUDNESS ////////////////////////////////////////
    if(menu==4){
    if(ir.value==IR_3){loud++;cl1();if(loud>1){loud=0;}w=1;w2=1;audio();}
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    loud=loud+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;w2=1;
    if(loud>1){loud=0;}if(loud<0){loud=1;}audio();}
    lcd.setCursor(0,0);lcd.print("LOUDNESS ");
    if(loud==1){lcd.print("ON ");}else{lcd.print("OFF");}} 

////////////////////////////////////// INPUT GAIN //////////////////////////////////////////
 
 if(menu==5){
      if(in==0){gain=gain1;}
      if(in==1){gain=gain2;}
      if(in==2){gain=gain3;}
/*
//     if(ir.value==IR_3);gain++;gr1=1;gr2=0;cl1();w2=1;// кнопка >
     if(ir.value==IR_3);{gain++;
//     gr1=1;gr2=0;
     cl1();
//     w2=1;// кнопка >
     if(ir.value==IR_4);gain--;gr1=0;gr2=1;cl1();w2=1;// кнопка <
     if(gain>3){gain=3;}if(gain<0){gain=0;}audio();} 
*/
     if (newPosition != oldPosition) {
     oldPosition = newPosition;
     gain=gain+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;w2=1;
     if(gain>3){gain=3;}if(gain<0){gain=0;}audio();} 
 
      if(in==0){gain1=gain;}
      if(in==1){gain2=gain;}
      if(in==2){gain3=gain;}
    
  lcd.setCursor(0,0);lcd.print(" INPUT ");lcd.print(in+1);
  lcd.setCursor(0,1);lcd.print(" Gain ");lcd.print((float)gain*3.75);lcd.print(" dB ");}

//////////////////////////////////////////////////////////////////////////////////////////
 
   if(millis()-time>5000 && w==1 && power==0){
     EEPROM.update(0,vol);
     EEPROM.update(1,bass+7);
     EEPROM.update(2,treb+7);
     EEPROM.update(3,in);
     EEPROM.update(4,gain1);EEPROM.update(5,gain2);EEPROM.update(6,gain3);
     EEPROM.update(7,loud);
     EEPROM.update(8,lr);EEPROM.update(9,rr);EEPROM.update(10,lf);EEPROM.update(11,rf);
//     lcd.clear();
     w=0,w2=1;menu=0;cl();}
 }// loop
 void cl1(){ir.value=0;delay(50);}
 void cl(){ir.value=0;delay(300);lcd.clear();}
 
 void audio(){
  tda.setVolume(vol); // громкость 0...63
  tda.setAttLR(lr);   // аттенюатор LR 0...31
  tda.setAttRR(rr);   // аттенюатор RR 0...31
  tda.setAttLF(lf);   // аттенюатор LF 0...31
  tda.setAttRF(rf);   // аттенюатор RF 0...31
  tda.setSwitch(in,loud,gain); // вход 0...2, тонкомпенсация 1 вкл 0 выкл, усиление 0...3
  tda.setBass(bass);    // тембр НЧ -7...+7
  tda.setTreble(treb);  // тембр ВЧ -7...+7
}

129 (2021-02-21 17:59:24 отредактировано VADA)

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

С MUTE все еще запущеннее.
В даташите нашел только код для включения MUTE. Как выключить - ХЗ.
Посему есть просьба, если не сильно напряжно, реализовать режим MUTE через включение Speaker Attenuators mute или Volume -78dB, а при отключении просто читать данные Volume из EEPROM.

Можно только с пульта.

130

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

Есть еще одна просьба, сделать переключение входов по перепаду уровня на кнопке INPUT(не по наличию уровня), т.е. по моменту перехода из состояния нажатой кнопки в состояние отпущенной. Чтобы выключать питание удержанием кнопки INPUT без переключения входов.

Буду безмерно благодарен и счастлив.

131 (2021-02-21 18:31:53 отредактировано VADA)

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

Видео работы кнопки POWER в моем исполнении
https://drive.google.com/file/d/1n0QEM3 … sp=sharing

132

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

У Вас есть возможность использовать LCD1602 по шине i2c? Если да, то опубликуйте на форуме базовый скетч без переделок и опишите какие дополнения и изменения надо внести.

133

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

Скетч свой, или Ваш?

134

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

Если мой, то он в 128 посте.

135

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

Под i2c перепишу, скину. Сейчас не дома.

136 (2021-02-22 03:11:04 отредактировано VADA)

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

Переписал свой под i2c.

//http://rcl-radio.ru/?p=58563

#define IR_1 0xFD50AF // Кнопка вверх
#define IR_2 0xFDCA35 // Кнопка вниз
#define IR_3 0xFD7887 // Кнопка >
#define IR_4 0xFD4AB5 // Кнопка <
#define IR_5 0xFD18E7 // Кнопка IN
#define IR_6 0xFD629D // Кнопка MUTE
#define IR_7 0xFD28D7 // Кнопка POWER


#include <Wire.h>
#include <MsTimer2.h>
#include <LiquidCrystal_I2C.h>
#include <Encoder.h>
#include <EEPROM.h>
#include <TDA7313.h>
#include <boarddefs.h>
#include <IRremote.h>
  IRrecv irrecv(10); // указываем вывод модуля IR приемника
  TDA7313 tda;
  decode_results ir;
  Encoder myEnc(3, 2);//CLK, DT подключение энкодера
  LiquidCrystal_I2C lcd(0x3F,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display
   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,time,time1,oldPosition  = -999;
   int vol,w1,w2=1,gr1,gr2,vol_d,menu,w,z,z0,z1,bass_d,bass,treb_d,treb,i,loud,in,mute,power,gain,gain1,gain2,gain3,lr,rr,lf,rf;

void setup(){ 
   Serial.begin(9600);
   Wire.begin();irrecv.enableIRIn(); // запускаем модуль I2C,IR
   lcd.begin();lcd.backlight();lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
   pinMode(15,INPUT_PULLUP);// КНОПКА ЭНКОДЕРA
   pinMode(14,INPUT_PULLUP);// КНОПКА IN
   pinMode(16,INPUT_PULLUP);// КНОПКА MUTE
   pinMode(12,OUTPUT);//Питание для источника   
   pinMode(13,OUTPUT);//Питание STANDBY
   
    MsTimer2::set(3, to_Timer);MsTimer2::start();
    vol = EEPROM.read(0);bass = EEPROM.read(1)-7;treb = EEPROM.read(2)-7;in = EEPROM.read(3);
    gain1 = EEPROM.read(4);gain2 = EEPROM.read(5);gain3 = EEPROM.read(6);loud = EEPROM.read(7);
    lr = EEPROM.read(8);rr = EEPROM.read(9);lf = EEPROM.read(10);rf = EEPROM.read(11);
    if(in==0){gain=gain1;}
    if(in==1){gain=gain2;}
    if(in==2){gain=gain3;}
    lcd.setCursor(0,0);lcd.print("TDA7313 IR POWER");
    lcd.setCursor(3,1);lcd.print("  Ver. 1  ");
    delay(2000);audio();
    lcd.clear();}
   void to_Timer(){newPosition = myEnc.read()/4;}
 
void loop(){
//KEY  
//MENU
   if(digitalRead(15)==LOW&&power==0){menu++;cl();myEnc.write(0);i++;time=millis();
   w=1;w2=1;if(menu>5){menu=0;}}// меню
//INPUT   
   if(digitalRead(14)==LOW&&power==0&&mute==0){in++;;cl();myEnc.write(0);time=millis();
   w=1;w2=1;if(in>2){in=0;};audio();}// КНОПКА ВЫБОРА ВХОДА IN
//MUTE
//   if(digitalRead(6)==LOW&&mute==0&&power==0){mute=1;cl();w=0;w2=1;lcd.print("      MUTE     ");menu=100;audio();}// mute on
//   if(digitalRead(6)==LOW&&mute==1&&power==0){mute=0;cl();time=millis();w=1;w2=1;menu=0;myEnc.write(0);audio();}// mute off
//POWER  
   if((digitalRead(15)==HIGH)&&power==0){i=0;}if(i>3){power=1;mute=1;audio();
//   cl();
   lcd.setCursor(0,0);lcd.print("    STANDBY   ");cl();menu=100;audio();delay(700);}// power off
   if((digitalRead(15))==LOW&&power==1){power=0;mute=0;audio();gr1=0;gr2=0;cl();
   menu=0;time=millis();w=1;w2=1;i++;myEnc.write(0);delay(500);lcd.clear();}// power on
//LED   
   if(in==1&&power==0){digitalWrite(12,HIGH);}else{digitalWrite(12,LOW);} // INPUT POWER
   if(power==0){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);} // выход STANDBY

// IR приемник  
  if ( irrecv.decode( &ir )){
  Serial.print("0x");Serial.println( ir.value,HEX);
  time1=millis();time=millis();
  
  w=1;w1=1;irrecv.resume();}
//POWER     
     if(ir.value==IR_7&&power==0){power=1;mute=1;audio();gr1=0;gr2=0;cl();
     lcd.setCursor(0,0);lcd.print("    STANDBY   ");w=0;menu=100;delay(700);}// power off
     if(ir.value==IR_7&&power==1){power=0;mute=0;audio();gr1=0;gr2=0;cl();
     menu=0;time=millis();w=1;w2=1;myEnc.write(0);delay(500);
//     lcd.clear();
     }// power on
//MENU UP/DOWN     
     if(ir.value==IR_1&&power==0){menu++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
     if(menu>4){menu=0;}}// меню кнопка вверх
     if(ir.value==IR_2&&power==0){menu--;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
     if(menu<0){menu=4;}}// меню кнопка вниз
//INPUT     
     if(ir.value==IR_5&&power==0){in++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
     if(in>2){in=0;}audio();}//  кнопка IN    
//MUTE
     if(ir.value==IR_6&&mute==0&&power==0){mute=1;gr1=0;gr2=0;cl();w=0;w2=1;
     lcd.print("      MUTE     ");menu=100;audio();}// mute on
     if(ir.value==IR_6&&mute==1&&power==0){mute=0;gr1=0;gr2=0;cl();
     time=millis();w=1;w2=1;menu=0;myEnc.write(0);audio();}// mute off
     
//////////////////////////////////////// Volume 0...63 дБ ////////////////////////////////////
 if(menu==0){     
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w2=1;
     if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w2=1;
     if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка >>>>>>
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w2=1;
     if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w2=1;
     if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка <<<<<<
   
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;
    if(vol>63){vol=63;}if(vol<0){vol=0;}audio();}
   
   lcd.setCursor(0,0);lcd.print("Volume ");
   lcd.print(-78.75+(float)vol*1.25,0);
   lcd.print(" ");
   lcd.setCursor(10,0);lcd.print("dB IN");lcd.print(in+1);
   vol_d=vol-15;
   
//   lcd.setCursor(13,0);lcd.print("IN");lcd.print(in+1);
   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;}}
//////////////////////////////////////////////////////////////////////////////////////////////

 /////////////////////// индикация тембр НЧ -14...14 дБ //////////////////////////////////////
   if(menu==1){   
     if(ir.value==IR_3){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){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;}}
////////////////////////////////////////////////////////////////////////////////////////////////
 
 /////////////////////// индикация тембр ВЧ -14...14 дБ ////////////////////////////////////////
   if(menu==2){   
   if(ir.value==IR_3){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){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;}}

 ///////////////////////////////////// BALANCE //////////////////////////////////////////////
   if(menu==3){
    if(ir.value==IR_3){lf++;lr++;rf--;rr--;cl1();
    lcd.clear();w=1;//кнопка >
    if(lf>10){lf=10;}if(rf<0){rf=0;}if(lr>10){lr=10;}if(rr<0){rr=0;}audio();}

    if(ir.value==IR_4){lf--;lr--;rf++;rr++;cl1();
    lcd.clear();w=1;//кнопка <
    if(lf<0){lf=0;}if(rf>10){rf=10;}if(lr<0){lr=0;}if(rr>10){rr=10;}audio();}
    
    if (newPosition != oldPosition){
    oldPosition = newPosition;
    lf=lf+newPosition;lr=lr+newPosition;rf=rf-newPosition;rr=rr-newPosition;myEnc.write(0);newPosition=0;
    lcd.clear();time=millis();w=1;
    if(lf>10){lf=10;}if(lf<0){lf=0;}if(rf>10){rf=10;}if(rf<0){rf=0;}
    if(lr>10){lr=10;}if(lr<0){lr=0;}if(rr>10){rr=10;}if(rr<0){rr=0;}
    audio();} 

   lcd.setCursor(0,0);
   if(lf-5>=0){lcd.print("-");}else{lcd.print("+");}
   lcd.print(abs(rf-5));lcd.print(" dB ");
   lcd.print(" <>  ");
   if(rf-5>=0){lcd.print("-");}else{lcd.print("+");}
   lcd.print(abs(rf-5));lcd.print(" dB ");
   lcd.setCursor(0,1);lcd.print("L");
   lcd.setCursor(15,1);lcd.print("R");  
   if(lf-5<0){lcd.setCursor(lf-5+7,1);lcd.write((uint8_t)0);}
   if(lf-5>0){lcd.setCursor(lf-5+8,1);lcd.write((uint8_t)0);}
   if(lf-5==0){lcd.setCursor(7,1);lcd.write((uint8_t)0);lcd.setCursor(8,1);lcd.write((uint8_t)0);w2=0;}
   }
/////////////////////////////////// LOUDNESS ////////////////////////////////////////
    if(menu==4){
    if(ir.value==IR_3){loud++;cl1();if(loud>1){loud=0;}w=1;w2=1;audio();}
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    loud=loud+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;w2=1;
    if(loud>1){loud=0;}if(loud<0){loud=1;}audio();}
    lcd.setCursor(0,0);lcd.print("LOUDNESS ");
    if(loud==1){lcd.print("ON ");}else{lcd.print("OFF");}} 

////////////////////////////////////// INPUT GAIN //////////////////////////////////////////
 
 if(menu==5){
      if(in==0){gain=gain1;}
      if(in==1){gain=gain2;}
      if(in==2){gain=gain3;}
/*
//     if(ir.value==IR_3);gain++;gr1=1;gr2=0;cl1();w2=1;// кнопка >
     if(ir.value==IR_3);{gain++;
//     gr1=1;gr2=0;
     cl1();
//     w2=1;// кнопка >
     if(ir.value==IR_4);gain--;gr1=0;gr2=1;cl1();w2=1;// кнопка <
     if(gain>3){gain=3;}if(gain<0){gain=0;}audio();} 
*/
     if (newPosition != oldPosition) {
     oldPosition = newPosition;
     gain=gain+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;w2=1;
     if(gain>3){gain=3;}if(gain<0){gain=0;}audio();} 
 
      if(in==0){gain1=gain;}
      if(in==1){gain2=gain;}
      if(in==2){gain3=gain;}
    
  lcd.setCursor(0,0);lcd.print(" INPUT ");lcd.print(in+1);
  lcd.setCursor(0,1);lcd.print(" Gain ");lcd.print((float)gain*3.75);lcd.print(" dB ");}

//////////////////////////////////////////////////////////////////////////////////////////
 
   if(millis()-time>5000 && w==1 && power==0){
     EEPROM.update(0,vol);
     EEPROM.update(1,bass+7);
     EEPROM.update(2,treb+7);
     EEPROM.update(3,in);
     EEPROM.update(4,gain1);EEPROM.update(5,gain2);EEPROM.update(6,gain3);
     EEPROM.update(7,loud);
     EEPROM.update(8,lr);EEPROM.update(9,rr);EEPROM.update(10,lf);EEPROM.update(11,rf);
//     lcd.clear();
     w=0,w2=1;menu=0;cl();}
 }// loop
 void cl1(){ir.value=0;delay(50);}
 void cl(){ir.value=0;delay(300);lcd.clear();}
 
 void audio(){
  tda.setVolume(vol); // громкость 0...63
  tda.setAttLR(lr);   // аттенюатор LR 0...31
  tda.setAttRR(rr);   // аттенюатор RR 0...31
  tda.setAttLF(lf);   // аттенюатор LF 0...31
  tda.setAttRF(rf);   // аттенюатор RF 0...31
  tda.setSwitch(in,loud,gain); // вход 0...2, тонкомпенсация 1 вкл 0 выкл, усиление 0...3
  tda.setBass(bass);    // тембр НЧ -7...+7
  tda.setTreble(treb);  // тембр ВЧ -7...+7
}

137

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

P.S. Доступ к видео открыл.

138

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

Power как активируется? нажатие и удержание кнопки энкодера?

139 (2021-02-21 21:31:15 отредактировано VADA)

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

Да, про хотелки забыл.

1.Сделать переключение входов по перепаду уровня на кнопке INPUT(не по наличию уровня), т.е. по моменту перехода из состояния нажатой кнопки в состояние отпущенной. Чтобы выключать питание удержанием кнопки INPUT без переключения входов.
Если сложно, просто решить проблемму в моей реализации через кнопку энкодера(пост 128).

2.Реализовать режим MUTE.
Мои задумки - через включение Speaker Attenuators mute или Volume -78dB, а при отключении просто читать данные Volume из EEPROM. Или как то по другому.

140

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

Может для power сделать отдельную кнопку?

141

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

Если я правильно Вас понял, power активируется при удержании кнопки IN, но не должен переключать IN при этом? Далее для включения надо также нажать IN, без переключения входа.

142

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

Хочется как на автомагнитолах, так как Вы описали  в посте 141.

143

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

Удержание кнопки IN - выключение. Кратковременное нажатии кнопки In когды выключено - срабатывает включение, без изминения IN.

Кратковременное нажатие IN во включенном состоянии меняет IN/

MUTE  сделал, не тестировал, должно работать

//http://rcl-radio.ru/?p=58563

#define IR_1 0xFD50AF // Кнопка вверх
#define IR_2 0xFDCA35 // Кнопка вниз
#define IR_3 0xFD7887 // Кнопка >
#define IR_4 0xFD4AB5 // Кнопка <
#define IR_5 0xFD18E7 // Кнопка IN
#define IR_6 0xFD629D // Кнопка MUTE
#define IR_7 0xFD28D7 // Кнопка POWER


#include <Wire.h>
#include <MsTimer2.h>
#include <LiquidCrystal_I2C.h>
#include <Encoder.h>
#include <EEPROM.h>
#include <TDA7313.h>
#include <boarddefs.h>
#include <IRremote.h>
  IRrecv irrecv(10); // указываем вывод модуля IR приемника
  TDA7313 tda;
  decode_results ir;
  Encoder myEnc(3, 2);//CLK, DT подключение энкодера
  //LiquidCrystal_I2C lcd(0x3F,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display
  LiquidCrystal_I2C lcd(0x27,16,2);
   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,time,time1,oldPosition  = -999;
   int vol,w1,w2=1,gr1,gr2,vol_d,menu,w,z,z0,z1,bass_d,bass,treb_d,treb,i,loud,in,mute,power,gain,gain1,gain2,gain3,lr,rr,lf,rf,kkk,vol_old,inp,inp1;

void setup(){ 
   Serial.begin(9600);
   Wire.begin();irrecv.enableIRIn(); // запускаем модуль I2C,IR
   lcd.init();lcd.backlight();lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
   pinMode(15,INPUT_PULLUP);// КНОПКА ЭНКОДЕРA
   pinMode(14,INPUT_PULLUP);// КНОПКА IN
   pinMode(16,INPUT_PULLUP);// КНОПКА MUTE
   pinMode(12,OUTPUT);//Питание для источника   
   pinMode(13,OUTPUT);//Питание STANDBY
   
    MsTimer2::set(3, to_Timer);MsTimer2::start();
    vol = EEPROM.read(0);bass = EEPROM.read(1)-7;treb = EEPROM.read(2)-7;in = EEPROM.read(3);
    gain1 = EEPROM.read(4);gain2 = EEPROM.read(5);gain3 = EEPROM.read(6);loud = EEPROM.read(7);
    lr = EEPROM.read(8);rr = EEPROM.read(9);lf = EEPROM.read(10);rf = EEPROM.read(11);
    if(in==0){gain=gain1;}
    if(in==1){gain=gain2;}
    if(in==2){gain=gain3;}
    lcd.setCursor(0,0);lcd.print("TDA7313 IR POWER");
    lcd.setCursor(3,1);lcd.print("  Ver. 1  ");
    delay(2000);audio();
    lcd.clear();}
   void to_Timer(){newPosition = myEnc.read()/4;}
 
void loop(){
//KEY 
if(power==0){ 
//MENU
   if(digitalRead(15)==LOW){menu++;cl();myEnc.write(0);i++;time=millis();
   w=1;w2=1;if(menu>5){menu=0;}}// меню
//INPUT 
   if(digitalRead(14)==LOW){inp1=1;kkk++;delay(200);}
   if(digitalRead(14)==HIGH&&inp1==1&&kkk<5){inp1=2;kkk=0;}
   if(inp1==2&&mute==0){inp1=0;in++;;cl();myEnc.write(0);time=millis();
   w=1;w2=1;if(in>2){in=0;};audio();}// КНОПКА ВЫБОРА ВХОДА IN
//MUTE
   if(digitalRead(16)==LOW&&mute==0){mute=1;cl();w=0;w2=1;lcd.print("      MUTE     ");menu=100;vol_old=vol;vol=0;audio();}// mute on
   if(digitalRead(16)==LOW&&mute==1){mute=0;cl();time=millis();w=1;w2=1;menu=0;myEnc.write(0);vol=vol_old;audio();}// mute off
}
//POWER  
   if(kkk>5){inp=1;kkk=0;}
   if(inp==1 && power==0){inp=0;power=1;mute=1;audio();gr1=0;gr2=0;cl();lcd.setCursor(0,0);lcd.print("    STANDBY   ");w=0;menu=100;audio();delay(500);}// power off
   if(digitalRead(14)==LOW && power==1){inp1=0;inp=0;power=0;mute=0;audio();gr1=0;gr2=0;cl();menu=0;time=millis();w=1;w2=1;myEnc.write(0);delay(500);}// power on
//LED   
   if(in==1&&power==0){digitalWrite(12,HIGH);}else{digitalWrite(12,LOW);} // INPUT POWER
   if(power==0){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);} // выход STANDBY

// IR приемник  
  if ( irrecv.decode( &ir )){
  Serial.print("0x");Serial.println( ir.value,HEX);
  time1=millis();time=millis();
  
  w=1;w1=1;irrecv.resume();}
//POWER     
     if(ir.value==IR_7&&power==0){power=1;mute=1;audio();gr1=0;gr2=0;cl();
     lcd.setCursor(0,0);lcd.print("    STANDBY   ");w=0;menu=100;delay(700);}// power off
     if(ir.value==IR_7&&power==1){power=0;mute=0;audio();gr1=0;gr2=0;cl();
     menu=0;time=millis();w=1;w2=1;myEnc.write(0);delay(500);
//     lcd.clear();
     }// power on
  
  if(power==0){    
//MENU UP/DOWN     
     if(ir.value==IR_1&&power==0){menu++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
     if(menu>4){menu=0;}}// меню кнопка вверх
     if(ir.value==IR_2&&power==0){menu--;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
     if(menu<0){menu=4;}}// меню кнопка вниз
//INPUT     
     if(ir.value==IR_5&&power==0){in++;gr1=0;gr2=0;cl();time=millis();w=1;w2=1;
     if(in>2){in=0;}audio();//  кнопка IN    
//MUTE
     if(ir.value==IR_6&&mute==0&&power==0){mute=1;gr1=0;gr2=0;cl();w=0;w2=1;
     lcd.print("      MUTE     ");menu=100;vol_old=vol;vol=0;audio();}// mute on
     if(ir.value==IR_6&&mute==1&&power==0){mute=0;gr1=0;gr2=0;cl();
     time=millis();w=1;w2=1;menu=0;myEnc.write(0);vol=vol_old;audio();}// mute off
     }
  }

//////////////////////////////////////// Volume 0...63 дБ ////////////////////////////////////
 if(menu==0){     
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w2=1;
     if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка > 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w2=1;
     if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка >>>>>>
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w2=1;
     if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка <
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w2=1;
     if(vol<0){vol=0;}if(vol>63){vol=63;}audio();}// кнопка <<<<<<
   
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;
    if(vol>63){vol=63;}if(vol<0){vol=0;}audio();}
   
   lcd.setCursor(0,0);lcd.print("Volume ");
   lcd.print(-78.75+(float)vol*1.25,0);
   lcd.print(" ");
   lcd.setCursor(10,0);lcd.print("dB IN");lcd.print(in+1);
   vol_d=vol-15;
   
//   lcd.setCursor(13,0);lcd.print("IN");lcd.print(in+1);
   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;}}
//////////////////////////////////////////////////////////////////////////////////////////////

 /////////////////////// индикация тембр НЧ -14...14 дБ //////////////////////////////////////
   if(menu==1){   
     if(ir.value==IR_3){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){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;}}
////////////////////////////////////////////////////////////////////////////////////////////////
 
 /////////////////////// индикация тембр ВЧ -14...14 дБ ////////////////////////////////////////
   if(menu==2){   
   if(ir.value==IR_3){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){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;}}

 ///////////////////////////////////// BALANCE //////////////////////////////////////////////
   if(menu==3){
    if(ir.value==IR_3){lf++;lr++;rf--;rr--;cl1();
    lcd.clear();w=1;//кнопка >
    if(lf>10){lf=10;}if(rf<0){rf=0;}if(lr>10){lr=10;}if(rr<0){rr=0;}audio();}

    if(ir.value==IR_4){lf--;lr--;rf++;rr++;cl1();
    lcd.clear();w=1;//кнопка <
    if(lf<0){lf=0;}if(rf>10){rf=10;}if(lr<0){lr=0;}if(rr>10){rr=10;}audio();}
    
    if (newPosition != oldPosition){
    oldPosition = newPosition;
    lf=lf+newPosition;lr=lr+newPosition;rf=rf-newPosition;rr=rr-newPosition;myEnc.write(0);newPosition=0;
    lcd.clear();time=millis();w=1;
    if(lf>10){lf=10;}if(lf<0){lf=0;}if(rf>10){rf=10;}if(rf<0){rf=0;}
    if(lr>10){lr=10;}if(lr<0){lr=0;}if(rr>10){rr=10;}if(rr<0){rr=0;}
    audio();} 

   lcd.setCursor(0,0);
   if(lf-5>=0){lcd.print("-");}else{lcd.print("+");}
   lcd.print(abs(rf-5));lcd.print(" dB ");
   lcd.print(" <>  ");
   if(rf-5>=0){lcd.print("-");}else{lcd.print("+");}
   lcd.print(abs(rf-5));lcd.print(" dB ");
   lcd.setCursor(0,1);lcd.print("L");
   lcd.setCursor(15,1);lcd.print("R");  
   if(lf-5<0){lcd.setCursor(lf-5+7,1);lcd.write((uint8_t)0);}
   if(lf-5>0){lcd.setCursor(lf-5+8,1);lcd.write((uint8_t)0);}
   if(lf-5==0){lcd.setCursor(7,1);lcd.write((uint8_t)0);lcd.setCursor(8,1);lcd.write((uint8_t)0);w2=0;}
   }
/////////////////////////////////// LOUDNESS ////////////////////////////////////////
    if(menu==4){
    if(ir.value==IR_3){loud++;cl1();if(loud>1){loud=0;}w=1;w2=1;audio();}
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    loud=loud+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;w2=1;
    if(loud>1){loud=0;}if(loud<0){loud=1;}audio();}
    lcd.setCursor(0,0);lcd.print("LOUDNESS ");
    if(loud==1){lcd.print("ON ");}else{lcd.print("OFF");}} 

////////////////////////////////////// INPUT GAIN //////////////////////////////////////////
 
 if(menu==5){
      if(in==0){gain=gain1;}
      if(in==1){gain=gain2;}
      if(in==2){gain=gain3;}
/*
//     if(ir.value==IR_3);gain++;gr1=1;gr2=0;cl1();w2=1;// кнопка >
     if(ir.value==IR_3);{gain++;
//     gr1=1;gr2=0;
     cl1();
//     w2=1;// кнопка >
     if(ir.value==IR_4);gain--;gr1=0;gr2=1;cl1();w2=1;// кнопка <
     if(gain>3){gain=3;}if(gain<0){gain=0;}audio();} 
*/
     if (newPosition != oldPosition) {
     oldPosition = newPosition;
     gain=gain+newPosition;myEnc.write(0);newPosition=0;lcd.clear();time=millis();w=1;w2=1;
     if(gain>3){gain=3;}if(gain<0){gain=0;}audio();} 
 
      if(in==0){gain1=gain;}
      if(in==1){gain2=gain;}
      if(in==2){gain3=gain;}
    
  lcd.setCursor(0,0);lcd.print(" INPUT ");lcd.print(in+1);
  lcd.setCursor(0,1);lcd.print(" Gain ");lcd.print((float)gain*3.75);lcd.print(" dB ");}

//////////////////////////////////////////////////////////////////////////////////////////
 
   if(millis()-time>5000 && w==1 && power==0){
     EEPROM.update(0,vol);
     EEPROM.update(1,bass+7);
     EEPROM.update(2,treb+7);
     EEPROM.update(3,in);
     EEPROM.update(4,gain1);EEPROM.update(5,gain2);EEPROM.update(6,gain3);
     EEPROM.update(7,loud);
     EEPROM.update(8,lr);EEPROM.update(9,rr);EEPROM.update(10,lf);EEPROM.update(11,rf);
//     lcd.clear();
     w=0,w2=1;menu=0;cl();}
 }// loop
 void cl1(){ir.value=0;delay(50);}
 void cl(){ir.value=0;delay(300);lcd.clear();}
 
 void audio(){
  tda.setVolume(vol); // громкость 0...63
  tda.setAttLR(lr);   // аттенюатор LR 0...31
  tda.setAttRR(rr);   // аттенюатор RR 0...31
  tda.setAttLF(lf);   // аттенюатор LF 0...31
  tda.setAttRF(rf);   // аттенюатор RF 0...31
  tda.setSwitch(in,loud,gain); // вход 0...2, тонкомпенсация 1 вкл 0 выкл, усиление 0...3
  tda.setBass(bass);    // тембр НЧ -7...+7
  tda.setTreble(treb);  // тембр ВЧ -7...+7
}

144

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

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

145

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

POWER работает, огромное спасибо.

146

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

Разжуйте, пожалуйста, кто такие
if(kkk>5){inp=1;kkk=0;}
и за что они отвечают. Я пытаюсь учиться.
big_smile

147

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

if(digitalRead(14)==LOW){inp1=1;kkk++;delay(200);} // нажимаем и держим кнопку, идет накопление kkk
если kkk>5, то срабатывает power
if(kkk>5){inp=1;kkk=0;}

Кнопка In нажата и отпущена, то kkk будет < 5
if(digitalRead(14)==HIGH&&inp1==1&&kkk<5){inp1=2;kkk=0;}
то применяем:
if(inp1==2&&mute==0){inp1=0;in++;;cl();myEnc.write(0);time=millis();
   w=1;w2=1;if(in>2){in=0;};audio();}// КНОПКА ВЫБОРА ВХОДА IN

148 (2021-02-21 22:17:35 отредактировано VADA)

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

Спасибо.
Ученье свет, а неученых тьма.

149 (2021-02-21 23:16:40 отредактировано VADA)

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

По поводу MUTE.
С кнопки работает. С пульта ноль реакции. Код с кнопки пульта подставлял вместо IR_6. реакции ноль.
Еще хотелось бы добавить режим MUTE при переходе в режим STANDBY для уменьшения переходных процессов в усилителе(хлопков в динамиках).

150

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

Ошибка с MUTE, скорее всего в моем скетче. Сижу разбираюсь.