<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[forum.rcl-radio.ru &mdash; Минималистичное переключение меню TDA7419]]></title>
		<link>http://forum.rcl-radio.ru/viewtopic.php?id=546</link>
		<atom:link href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=546&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Минималистичное переключение меню TDA7419».]]></description>
		<lastBuildDate>Sun, 07 Dec 2025 20:18:18 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Минималистичное переключение меню TDA7419]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11990#p11990</link>
			<description><![CDATA[<p>Доброго времени суток, использую скетч:</p><p>#define SW&nbsp; &nbsp; &nbsp; &nbsp;10&nbsp; // pin SW ENCODER<br />#define CLK&nbsp; &nbsp; &nbsp; &nbsp;9&nbsp; // pin CLK ENCODER<br />#define DT&nbsp; &nbsp; &nbsp; &nbsp; 8&nbsp; // pin CLK ENCODER<br />#define IR&nbsp; &nbsp; &nbsp; &nbsp;12&nbsp; // pin IR input</p><br /><p>#include &lt;Wire.h&gt;<br />#include &lt;TDA7419.h&gt;<br />#include &lt;EEPROM.h&gt;<br />#include &lt;Encoder.h&gt;<br />#include &lt;MsTimer2.h&gt;<br />#include &lt;IRremote.h&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// <a href="http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip">http://rcl-radio.ru/wp-content/uploads/ … remote.zip</a><br />#include &lt;LiquidCrystal_I2C.h&gt;&nbsp; // <a href="http://forum.rcl-radio.ru/misc.php?action=pan_download&amp;item=45&amp;download=1">http://forum.rcl-radio.ru/misc.php?acti … download=1</a><br />Encoder myEnc(CLK, DT);<br />LiquidCrystal_I2C lcd(0x27,16,2); <br />IRrecv irrecv(IR); <br />TDA7419 tda;<br />decode_results ir; </p><br /><p>byte v1[8] = {0b00111,0b00111,0b00111,0b00111,0b00111,0b00111,0b00111,0b00111};<br />byte v2[8] = {0b00111,0b00111,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};&nbsp; &nbsp; &nbsp; <br />byte v3[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};<br />byte v4[8] = {0b11111,0b11111,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};<br />byte v5[8] = {0b11100,0b11100,0b00000,0b00000,0b00000,0b00000,0b11100,0b11100};<br />byte v6[8] = {0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b11100};<br />byte v7[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00111,0b00111};<br />byte v8[8] = {0b11111,0b11111,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000}; <br />unsigned long times,oldPosition&nbsp; = -999,newPosition,tim;<br /> byte a[6],d1,d2,d3,d4,d5,d6,e1,e2,e3,x;<br />&nbsp; int menu,bas,w,w1,vol_d,bass_d,treble_d,middle,middle_reg,z,in,treb,bass_reg,bass;<br />&nbsp; int gain0,gain1,gain2,gain3,gain_d,set,vol_reg,mute_reg,in_reg,treb_reg,menu0,power;<br />&nbsp; int lon, lon_f, lon_d,out,vol_out,rf,lf,rt,lt,sab,treb_c,mid_c,bas_c,sab_f,mute=1;<br />&nbsp; bool w2,w3,w4;<br />&nbsp; int tic;</p><br /><br /><p>void setup(){<br />&nbsp; lcd.init();lcd.backlight();Serial.begin(9600);irrecv.enableIRIn();<br />&nbsp; lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);<br />&nbsp; lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);<br />&nbsp; pinMode(SW,INPUT);// SW ENCODER<br />&nbsp; MsTimer2::set(3, to_Timer);MsTimer2::start();<br />&nbsp; if(EEPROM.read(100)!=0){for(int i=0;i&lt;101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении <br />&nbsp; vol_reg = EEPROM.read(0);treb_reg = EEPROM.read(1)-100;middle_reg = EEPROM.read(2)-100;bass_reg = EEPROM.read(3)-100;in = EEPROM.read(4);<br />&nbsp; lon_f = EEPROM.read(5);lon = EEPROM.read(6);<br />&nbsp; rf = EEPROM.read(7);lf = EEPROM.read(8);rt = EEPROM.read(9);lt = EEPROM.read(10);sab = EEPROM.read(11);</p><p>&nbsp; }</p><p>void loop(){<br />//// BUTTON ENCODER MENU MENU2 //////////////////////////////////////////////////////////<br />&nbsp; if(digitalRead(SW)==LOW &amp;&amp; w3==0){menu++;tic++;if(menu&gt;4){menu=0;}delay(200);times=millis();w=1;w2=1;cl();}<br />&nbsp; if(digitalRead(SW)==HIGH){tic=0;}<br />&nbsp; if(tic==4){menu=100;w3=1;lcd.setCursor(0,0);lcd.print(&quot;&nbsp; &nbsp; &nbsp;МЕНЮ 2&nbsp; &nbsp; &nbsp;&quot;);delay(1500);cl();menu0=1;}<br />&nbsp; if(digitalRead(SW)==LOW &amp;&amp; w3==1){menu0++;if(menu0&gt;11){menu0=1;}delay(200);times=millis();w=1;w2=1;cl();}</p><p>&nbsp; <br />////////////// VOLUME ///////////////////////////////////////////////////////////////////<br /> if(menu==0){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;vol_reg=vol_reg-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;vol_func();audio();}<br />&nbsp; &nbsp;a[0]= (80-vol_reg)/10;a[1]=(80-vol_reg)%10;<br />&nbsp; &nbsp;for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}<br />&nbsp; &nbsp;if(mute_reg==0){lcd.setCursor(0,0);lcd.print(&quot;VOLUME&quot;);}else{lcd.setCursor(0,0);lcd.print(&quot;MUTE&quot;);}<br />&nbsp; &nbsp;lcd.setCursor(0,1);lcd.print(&quot;INPUT &quot;);lcd.print(in);<br />&nbsp; }</p><p>////////////// TREBLE ///////////////////////////////////////////////////////////////////<br /> if(menu==1){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;treb_reg=treb_reg+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;treb_func();audio();}<br />&nbsp; &nbsp;if(treb_reg&lt;0){lcd.setCursor(9,0);treb=abs(treb_reg);lcd.write((uint8_t)3);}else{treb=treb_reg;lcd.setCursor(9,0);lcd.print(&quot; &quot;);}<br />&nbsp; &nbsp;a[0]= treb/10;a[1]=treb%10;<br />&nbsp; &nbsp;for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}<br />&nbsp; &nbsp;lcd.setCursor(0,0);lcd.print(&quot;TREBLE&quot;);lcd.setCursor(0,1);lcd.print(&quot;CONTROL&quot;);<br />&nbsp; &nbsp;}&nbsp; &nbsp; </p><p>////////////// MIDDLE ///////////////////////////////////////////////////////////////////<br /> if(menu==2){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;middle_reg=middle_reg+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;mid_func();audio();}<br />&nbsp; &nbsp;if(middle_reg&lt;0){lcd.setCursor(9,0);middle=abs(middle_reg);lcd.write((uint8_t)3);}else{middle=middle_reg;lcd.setCursor(9,0);lcd.print(&quot; &quot;);}<br />&nbsp; &nbsp;a[0]= middle/10;a[1]=middle%10;<br />&nbsp; &nbsp;for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}<br />&nbsp; &nbsp;lcd.setCursor(0,0);lcd.print(&quot;MIDDLE&quot;);lcd.setCursor(0,1);lcd.print(&quot;CONTROL&quot;);<br />&nbsp; &nbsp;}&nbsp; &nbsp;</p><p>////////////// BASS ///////////////////////////////////////////////////////////////////<br /> if(menu==3){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;bass_reg=bass_reg+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;bass_func();audio();}<br />&nbsp; &nbsp;if(bass_reg&lt;0){lcd.setCursor(9,0);bass=abs(bass_reg);lcd.write((uint8_t)3);}else{bass=bass_reg;lcd.setCursor(9,0);lcd.print(&quot; &quot;);}<br />&nbsp; &nbsp;a[0]= bass/10;a[1]=bass%10;<br />&nbsp; &nbsp;for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}<br />&nbsp; &nbsp;lcd.setCursor(0,0);lcd.print(&quot;BASS&quot;);lcd.setCursor(0,1);lcd.print(&quot;CONTROL&quot;);<br />&nbsp; &nbsp;}&nbsp; </p><p>////////////// INPUT ///////////////////////////////////////////////////////////////////<br /> if(menu==4){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;in=in+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;in_func();audio();}<br />&nbsp; &nbsp;a[0]= in;<br />&nbsp; &nbsp;for(x=0;x&lt;1;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}<br />&nbsp; &nbsp;lcd.setCursor(0,0);lcd.print(&quot;INPUT&quot;);lcd.setCursor(0,1);lcd.print(&quot;CONTROL&quot;);<br />&nbsp; &nbsp;}&nbsp; &nbsp;</p><p>////////////////////////////////////////////////////////////////////////////////////////<br />///// MENU2 ////////////////////////////////////////////////////////////////////////////<br />////////////// LOUDNESS ///////////////////////////////////////////////////////////////////<br /> if(menu0==1){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;lon_f=lon_f+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;lon_f_func();audio();}<br />&nbsp; &nbsp;lcd.setCursor(0,0);lcd.print(&quot;LOUDNESS&quot;);lcd.setCursor(0,1);lcd.print(&quot;CENTER FREQUENCY&quot;);<br />&nbsp; &nbsp;lcd.setCursor(10,0);<br />&nbsp; &nbsp;switch(lon_f){<br />&nbsp; &nbsp; case 0: lcd.print(&quot;FLAT&nbsp; &quot;);break;<br />&nbsp; &nbsp; case 1: lcd.print(&quot;400Hz &quot;);break;<br />&nbsp; &nbsp; case 2: lcd.print(&quot;800Hz &quot;);break;<br />&nbsp; &nbsp; case 3: lcd.print(&quot;2400Hz&quot;);break;}<br />&nbsp; &nbsp;}&nbsp; &nbsp;</p><p> ////////////// LOUDNESS GAIN ///////////////////////////////////////////////////////////////////<br /> if(menu0==2){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;lon=lon+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;lon_func();audio();}<br />&nbsp; &nbsp;a[0]= lon/10;a[1]=lon%10;<br />&nbsp; &nbsp;for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}<br />&nbsp; &nbsp;lcd.setCursor(0,0);lcd.print(&quot;LOUDNESS&quot;);lcd.setCursor(0,1);lcd.print(&quot;GAIN&quot;);<br />&nbsp; &nbsp;} </p><p>//////////////// TREBLE FREQ /////////////////////////////////////////////////////////////////////<br /> if(menu0==3){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;treb_c=treb_c+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;treb_c_func();audio();}<br />&nbsp; &nbsp;lcd.setCursor(0,0);lcd.print(&quot;TREBLE&quot;);lcd.setCursor(0,1);lcd.print(&quot;CENTER FREQUENCY&quot;);<br />&nbsp; &nbsp;lcd.setCursor(8,0);<br />&nbsp; &nbsp;switch(treb_c){<br />&nbsp; &nbsp; case 0: lcd.print(&quot;10.0 kHz&quot;);break;<br />&nbsp; &nbsp; case 1: lcd.print(&quot;12.5 kHz&quot;);break;<br />&nbsp; &nbsp; case 2: lcd.print(&quot;15.0 kHz&quot;);break;<br />&nbsp; &nbsp; case 3: lcd.print(&quot;17.5 kHz&quot;);break;}<br />&nbsp; &nbsp;}&nbsp; &nbsp;</p><p>//////////////// MIDDLE FREQ /////////////////////////////////////////////////////////////////////<br /> if(menu0==4){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;mid_c=mid_c+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;mid_c_func();audio();}<br />&nbsp; &nbsp;lcd.setCursor(0,0);lcd.print(&quot;MIDDLE&quot;);lcd.setCursor(0,1);lcd.print(&quot;CENTER FREQUENCY&quot;);<br />&nbsp; &nbsp;lcd.setCursor(9,0);<br />&nbsp; &nbsp;switch(mid_c){<br />&nbsp; &nbsp; case 0: lcd.print(&quot;0.5 kHz&quot;);break;<br />&nbsp; &nbsp; case 1: lcd.print(&quot;1.0 kHz&quot;);break;<br />&nbsp; &nbsp; case 2: lcd.print(&quot;1.5 kHz&quot;);break;<br />&nbsp; &nbsp; case 3: lcd.print(&quot;2.5 kHz&quot;);break;}<br />&nbsp; &nbsp;}&nbsp; </p><p>//////////////// BASS FREQ /////////////////////////////////////////////////////////////////////<br /> if(menu0==5){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;bas_c=bas_c+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;bas_c_func();audio();}<br />&nbsp; &nbsp;lcd.setCursor(0,0);lcd.print(&quot;BASS&quot;);lcd.setCursor(0,1);lcd.print(&quot;CENTER FREQUENCY&quot;);<br />&nbsp; &nbsp;lcd.setCursor(9,0);<br />&nbsp; &nbsp;switch(bas_c){<br />&nbsp; &nbsp; case 0: lcd.print(&quot;60&nbsp; Hz&quot;);break;<br />&nbsp; &nbsp; case 1: lcd.print(&quot;80&nbsp; Hz&quot;);break;<br />&nbsp; &nbsp; case 2: lcd.print(&quot;100 Hz&quot;);break;<br />&nbsp; &nbsp; case 3: lcd.print(&quot;200 Hz&quot;);break;}<br />&nbsp; &nbsp;} </p><p>//////////////// SUBWOOFER FREQ /////////////////////////////////////////////////////////////////////<br /> if(menu0==6){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;sab_f=sab_f+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;sab_f_func();audio();}<br />&nbsp; &nbsp;lcd.setCursor(0,0);lcd.print(&quot;SUBWOOFER&quot;);lcd.setCursor(0,1);lcd.print(&quot;CENTER FREQUENCY&quot;);<br />&nbsp; &nbsp;lcd.setCursor(10,0);<br />&nbsp; &nbsp;switch(sab_f){<br />&nbsp; &nbsp; case 0: lcd.print(&quot;FLAT&nbsp; &quot;);break;<br />&nbsp; &nbsp; case 1: lcd.print(&quot;80&nbsp; Hz&quot;);break;<br />&nbsp; &nbsp; case 2: lcd.print(&quot;120 Hz&quot;);break;<br />&nbsp; &nbsp; case 3: lcd.print(&quot;160 Hz&quot;);break;}<br />&nbsp; &nbsp;}&nbsp; &nbsp;</p><p> ////////////// RF GAIN ///////////////////////////////////////////////////////////////////<br /> if(menu0==7){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;rf=rf+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;rf_func();audio();}<br />&nbsp; &nbsp;a[0]= rf/10;a[1]=rf%10;<br />&nbsp; &nbsp;for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}<br />&nbsp; &nbsp;lcd.setCursor(0,0);lcd.print(&quot;RF_OUT&quot;);lcd.setCursor(0,1);lcd.print(&quot;GAIN&quot;);<br />&nbsp; &nbsp;}&nbsp; <br /> ////////////// LF GAIN ///////////////////////////////////////////////////////////////////<br /> if(menu0==8){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;lf=lf+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;lf_func();audio();}<br />&nbsp; &nbsp;a[0]= lf/10;a[1]=lf%10;<br />&nbsp; &nbsp;for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}<br />&nbsp; &nbsp;lcd.setCursor(0,0);lcd.print(&quot;LF_OUT&quot;);lcd.setCursor(0,1);lcd.print(&quot;GAIN&quot;);<br />&nbsp; &nbsp;}&nbsp; <br /> ////////////// RT GAIN ///////////////////////////////////////////////////////////////////<br /> if(menu0==9){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;rt=rt+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;rt_func();audio();}<br />&nbsp; &nbsp;a[0]= rt/10;a[1]=rt%10;<br />&nbsp; &nbsp;for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}<br />&nbsp; &nbsp;lcd.setCursor(0,0);lcd.print(&quot;RT_OUT&quot;);lcd.setCursor(0,1);lcd.print(&quot;GAIN&quot;);<br />&nbsp; &nbsp;}<br /> ////////////// LT GAIN ///////////////////////////////////////////////////////////////////<br /> if(menu0==10){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;lt=lt+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;lt_func();audio();}<br />&nbsp; &nbsp;a[0]= lt/10;a[1]=lt%10;<br />&nbsp; &nbsp;for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}<br />&nbsp; &nbsp;lcd.setCursor(0,0);lcd.print(&quot;LT_OUT&quot;);lcd.setCursor(0,1);lcd.print(&quot;GAIN&quot;);<br />&nbsp; &nbsp;}&nbsp; &nbsp; <br /> ////////////// SAB GAIN ///////////////////////////////////////////////////////////////////<br /> if(menu0==11){</p><p>&nbsp; &nbsp;if (newPosition != oldPosition){oldPosition = newPosition;sab=sab+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;sab_func();audio();}<br />&nbsp; &nbsp;a[0]= sab/10;a[1]=sab%10;<br />&nbsp; &nbsp;for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}<br />&nbsp; &nbsp;lcd.setCursor(0,0);lcd.print(&quot;SAB_OUT&quot;);lcd.setCursor(0,1);lcd.print(&quot;GAIN&quot;);<br />&nbsp; &nbsp;}&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </p><p>//// EEPROM ///////////////////////////////////////<br /> if(millis()-times&gt;5000 &amp;&amp; w==1 &amp;&amp; mute==1 &amp;&amp; power==0){<br /> EEPROM.update(0,vol_reg);EEPROM.update(1,treb_reg+100);EEPROM.update(2,middle_reg+100);EEPROM.update(3,bass_reg+100);EEPROM.update(4,in);<br /> EEPROM.update(5,lon_f);EEPROM.update(6,lon);<br /> EEPROM.update(7,rf);EEPROM.update(8,lf);EEPROM.update(9,rt);EEPROM.update(10,lt);EEPROM.update(11,sab);<br /> menu=0;menu0=100;w=0;w2=1;w3=0;tic=0;cl();<br />}&nbsp; &nbsp; <br />&nbsp; }// END LOOP </p><br /><p>void rf_func(){if(rf&gt;15){rf=15;}if(rf&lt;0){rf=0;}}<br />void lf_func(){if(lf&gt;15){lf=15;}if(lf&lt;0){lf=0;}}<br />void rt_func(){if(rt&gt;15){rt=15;}if(rt&lt;0){rt=0;}}<br />void lt_func(){if(lt&gt;15){lt=15;}if(lt&lt;0){lt=0;}}<br />void sab_func(){if(sab&gt;15){sab=15;}if(sab&lt;0){sab=0;}}<br />void sab_f_func(){if(sab_f&gt;3){sab_f=3;}if(sab_f&lt;0){sab_f=0;}}<br />void bas_c_func(){if(bas_c&gt;3){bas_c=3;}if(bas_c&lt;0){bas_c=0;}}<br />void mid_c_func(){if(mid_c&gt;3){mid_c=3;}if(mid_c&lt;0){mid_c=0;}}<br />void treb_c_func(){if(treb_c&gt;3){treb_c=3;}if(treb_c&lt;0){treb_c=0;}}<br />void lon_func(){if(lon&gt;15){lon=15;}if(lon&lt;0){lon=0;}}<br />void lon_f_func(){if(lon_f&gt;3){lon_f=3;}if(lon_f&lt;0){lon_f=0;}}<br />void in_func(){if(in&gt;3){in=3;}if(in&lt;1){in=1;}}<br />void bass_func(){if(bass_reg&gt;15){bass_reg=15;}if(bass_reg&lt;-15){bass_reg=-15;}}<br />void mid_func(){if(middle_reg&gt;15){middle_reg=15;}if(middle_reg&lt;-15){middle_reg=-15;}}<br />void vol_func(){if(vol_reg&gt;79){vol_reg=79;}if(vol_reg&lt;0){vol_reg=0;}}<br />void treb_func(){if(treb_reg&gt;15){treb_reg=15;}if(treb_reg&lt;-15){treb_reg=-15;}}<br />void cl(){ir.value=0;delay(300);lcd.clear();}<br />void cl1(){ir.value=0;delay(200);}&nbsp; </p><p>void audio(){<br />&nbsp; tda.setInput(in,gain0,0);&nbsp; &nbsp; //вх1=1, вх2=2, вх3=3<br />&nbsp; tda.setInput2(0,0,0);&nbsp; &nbsp;// не используется<br />&nbsp; tda.setAtt_loudness(lon,lon_f,0,0);<br />&nbsp; tda.setSoft(mute,0,0,0,0);//mute off (не менять)<br />&nbsp; tda.setVolume(vol_reg-79,0);&nbsp; &nbsp;// общая громкость от 0 до 79 макс<br />&nbsp; tda.setAtt_LF(64+lf,0);&nbsp; &nbsp;// гром. лк фронт<br />&nbsp; tda.setAtt_RF(64+rf,0);&nbsp; &nbsp;// гром. пк фронт<br />&nbsp; tda.setAtt_LT(64+lt,0);&nbsp; &nbsp;// гром. лк тыл<br />&nbsp; tda.setAtt_RT(64+rt,0);&nbsp; &nbsp;// гром. пк тыл<br />&nbsp; tda.setAtt_SUB(64+sab,0);&nbsp; // гром. савбуфер<br />&nbsp; tda.setAtt_Mix(79,0);&nbsp; &nbsp;// не использует<br />&nbsp; tda.setFilter_Treble(treb_reg,treb_c,0);<br />&nbsp; tda.setFilter_Middle(middle_reg,0,0);<br />&nbsp; tda.setFilter_Bass(bass_reg,0,0);<br />&nbsp; tda.setSub_M_B(sab_f,mid_c,bas_c,0,0);<br />&nbsp; tda.setMix_Gain_Eff(1,0,0,0,0); // не используется<br />&nbsp; tda.setSpektor(0,0,1,0,1,0,0);<br />}&nbsp; </p><p>void to_Timer(){newPosition = myEnc.read()/4;} </p><p>void digit(){switch(a[x]){<br />case 0: d1=1,d2=8,d3=6,d4=1,d5=3,d6=6;break;case 1: d1=32,d2=2,d3=6,d4=32,d5=32,d6=6;break;<br />case 2: d1=2,d2=8,d3=6,d4=1,d5=4,d6=5;break;case 3: d1=2,d2=4,d3=6,d4=7,d5=3,d6=6;break;<br />case 4: d1=1,d2=3,d3=6,d4=32,d5=32,d6=6;break;case 5: d1=1,d2=4,d3=5,d4=7,d5=3,d6=6;break;<br />case 6: d1=1,d2=4,d3=5,d4=1,d5=3,d6=6;break;case 7: d1=1,d2=8,d3=6,d4=32,d5=32,d6=6;break;<br />case 8: d1=1,d2=4,d3=6,d4=1,d5=3,d6=6;break;case 9: d1=1,d2=4,d3=6,d4=7,d5=3,d6=6;break;}<br />lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);<br />lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);}&nbsp; </p><p>спасибо автору за труды, чуть ли единственный&nbsp; в этой области. <br />данный скетч один, который запустился без зависания наглухо ардуинки)))). Не проверял полноценно на полностью собранной системе, как отрабатывает процессор и как в общем звучит, гонял меню все четко на первый взгляд и хотелось бы попросить о возможности добавить 2 физические кнопки: STANDBY и MUTE, так же более заинтересовал второй вариант отображения, со шкалой которая. За что отвечают 8 байтов в начале скетча? эту строчку: if(EEPROM.read(100)!=0){for(int i=0;i&lt;101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении, как я понял уже можно удалить и обновить скетч, так как первое включение в принципе произошло(при выключении ардуинки данные сбрасываются изза этого ведь, если ее вновь включаешь?)</p>]]></description>
			<author><![CDATA[null@example.com (akuma_angel)]]></author>
			<pubDate>Sun, 07 Dec 2025 20:18:18 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11990#p11990</guid>
		</item>
		<item>
			<title><![CDATA[Re: Минималистичное переключение меню TDA7419]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=8125#p8125</link>
			<description><![CDATA[<p>Понял, хорошо.</p>]]></description>
			<author><![CDATA[null@example.com (zhikovpavlik2003)]]></author>
			<pubDate>Fri, 28 Jul 2023 07:53:17 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=8125#p8125</guid>
		</item>
		<item>
			<title><![CDATA[Re: Минималистичное переключение меню TDA7419]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=8124#p8124</link>
			<description><![CDATA[<p>Возможно для активации этого параметра необходимо будет изменить другие параметры из этой таблицы</p><p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2023/07/6fd8296d3f80dc0a6783467fa20f8932.png" alt="http://forum.rcl-radio.ru/uploads/images/2023/07/6fd8296d3f80dc0a6783467fa20f8932.png" /></span></p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Fri, 28 Jul 2023 07:49:24 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=8124#p8124</guid>
		</item>
		<item>
			<title><![CDATA[Re: Минималистичное переключение меню TDA7419]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=8122#p8122</link>
			<description><![CDATA[<p>Спасибо!</p>]]></description>
			<author><![CDATA[null@example.com (zhikovpavlik2003)]]></author>
			<pubDate>Fri, 28 Jul 2023 07:48:00 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=8122#p8122</guid>
		</item>
		<item>
			<title><![CDATA[Re: Минималистичное переключение меню TDA7419]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=8121#p8121</link>
			<description><![CDATA[<p>tda.setMix_Gain_Eff(1,0,0,0,0); // не используется</p><p>вот эта функция</p><p>void TDA7419::setMix_Gain_Eff(int mix_l, int mix_r, int mix_en, int sub_en, int gain_eff){<br />&nbsp; &nbsp; &nbsp; &nbsp; switch (mix_l) {&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 0: mix_l = 0b00000000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 1: mix_l = 0b00000001;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; switch (mix_r) {&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 0: mix_r = 0b00000000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 1: mix_r = 0b00000010;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; switch (mix_en) {&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 0: mix_en = 0b00000000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 1: mix_en = 0b00000100;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; switch (sub_en) {&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 0: sub_en = 0b00000000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 1: sub_en = 0b00001000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; switch (gain_eff) {&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 0: gain_eff = 0b11000000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 1: gain_eff = 0b00000000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 2: gain_eff = 0b00010000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 3: gain_eff = 0b00100000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 4: gain_eff = 0b00110000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 5: gain_eff = 0b01000000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 6: gain_eff = 0b01010000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 7: gain_eff = 0b01100000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 8: gain_eff = 0b01110000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 9: gain_eff = 0b10000000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; case&nbsp; 10: gain_eff = 0b10010000;break;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; int mix_sum = mix_l + mix_r + mix_en + sub_en + gain_eff;<br />&nbsp; writeWire(TDA7419_MIX_G_EFF, mix_sum);<br />&nbsp; &nbsp; &nbsp; &nbsp; }</p><p>можете менять последний параметр от 0 до 10</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Fri, 28 Jul 2023 07:46:35 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=8121#p8121</guid>
		</item>
		<item>
			<title><![CDATA[Re: Минималистичное переключение меню TDA7419]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=8120#p8120</link>
			<description><![CDATA[<p>Для 2005 года, это просто пушка микросхема, да это не аудиопроцессор по типу adau, но в ней производитель столько всего совместил, что её тоже можно тонко настроить, и подрезать немного по частоте и сверху для сабвуфера, и снизу для фронта, тыл играет в полную полосу. Также эквалайзер есть, который можно покрутить. Вообщем отличная микра, были бы у меня такие знания в программировании, а то только умею даташиты читать, да платы печатные паять.</p>]]></description>
			<author><![CDATA[null@example.com (zhikovpavlik2003)]]></author>
			<pubDate>Fri, 28 Jul 2023 07:45:18 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=8120#p8120</guid>
		</item>
		<item>
			<title><![CDATA[Re: Минималистичное переключение меню TDA7419]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=8119#p8119</link>
			<description><![CDATA[<p>Перечитал весь даташит, и нашёл что к чему, центральные полосы treb_c bass_c, middle_c - они как эквалайзер организованы, простенький эквалайзер, чтобы поднять, либо занизить ту или иную частоту, а HPF фильтр, он подписан как DSO Filter, и вот для него таблица:<br /><a href="https://ibb.co/Gxjxzfw"><span class="postimg"><img src="https://i.ibb.co/ngSgxq2/312312312.png" alt="https://i.ibb.co/ngSgxq2/312312312.png" /></span></a><br />В даташите написано, чем выше выставлен GAIN на DSO, тем выше он будет резать снизу, для этого там и стоят конденсаторы на 0.022uF, вот теперь только нужно задействовать его в код.</p>]]></description>
			<author><![CDATA[null@example.com (zhikovpavlik2003)]]></author>
			<pubDate>Fri, 28 Jul 2023 07:40:26 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=8119#p8119</guid>
		</item>
		<item>
			<title><![CDATA[Re: Минималистичное переключение меню TDA7419]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=8118#p8118</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Тут еще есть autozero, который делает автоматически 0дБ на входе, как его можно тоже задействовать? Буду благодарен, если подскажите как управлять ими.</p></blockquote></div><p>autozero уже активен </p><p>tda.setInput(in,gain,0);&nbsp; &nbsp; //вх1=1, вх2=2, вх3=3</p><p>0 - значение параметра autozero</p><p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2023/07/b3e4aa82aa619da454b1e06af69bd66e.png" alt="http://forum.rcl-radio.ru/uploads/images/2023/07/b3e4aa82aa619da454b1e06af69bd66e.png" /></span> </p><p> hpf фильтр так же активен</p><p>tda.setFilter_Treble(treb,treb_c,0); <br />tda.setFilter_Middle(mid,middle_q,0);<br />tda.setFilter_Bass(bass,bass_q,0);<br />tda.setSub_M_B(sub_f,middle_c,bass_c,0,0);</p><p>параметры treb_c bass_c, middle_c - меняют центральную частоту среза</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Fri, 28 Jul 2023 07:16:48 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=8118#p8118</guid>
		</item>
		<item>
			<title><![CDATA[Re: Минималистичное переключение меню TDA7419]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=8117#p8117</link>
			<description><![CDATA[<p>Тут еще есть autozero, который делает автоматически 0дБ на входе, как его можно тоже задействовать? Буду благодарен, если подскажите как управлять ими.<br /><a href="https://imgbb.com/"><span class="postimg"><img src="https://i.ibb.co/86bBZLd/35566.png" alt="https://i.ibb.co/86bBZLd/35566.png" /></span></a></p>]]></description>
			<author><![CDATA[null@example.com (zhikovpavlik2003)]]></author>
			<pubDate>Fri, 28 Jul 2023 06:58:25 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=8117#p8117</guid>
		</item>
		<item>
			<title><![CDATA[Re: Минималистичное переключение меню TDA7419]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=8116#p8116</link>
			<description><![CDATA[<p>Здравствуйте, читаю даташит, и смотрю структурно-функциональную схему, у микросхемы есть hpf фильтр на каналы для фронта, как можно его задействовать? Я хочу подрезать на частоту которую может этот фильтр. Или это для спектранализатора он используется?<br /><a href="https://imgbb.com/"><span class="postimg"><img src="https://i.ibb.co/9TNSCFp/3232.png" alt="https://i.ibb.co/9TNSCFp/3232.png" /></span></a><br /><a href="https://ibb.co/3FQZFBw"><span class="postimg"><img src="https://i.ibb.co/B6FM6qm/33211.png" alt="https://i.ibb.co/B6FM6qm/33211.png" /></span></a></p><p>Или я так понимаю фильтр зависит от вот этих конденсаторов? Чем выше их номинал, тем выше срез частоты.<br /><a href="https://imgbb.com/"><span class="postimg"><img src="https://i.ibb.co/JBCZmpF/3454111.png" alt="https://i.ibb.co/JBCZmpF/3454111.png" /></span></a></p>]]></description>
			<author><![CDATA[null@example.com (zhikovpavlik2003)]]></author>
			<pubDate>Fri, 28 Jul 2023 06:54:35 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=8116#p8116</guid>
		</item>
		<item>
			<title><![CDATA[Re: Минималистичное переключение меню TDA7419]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7769#p7769</link>
			<description><![CDATA[<p>Здравствуйте, вот печатки, там 3D вид, и сразу сделан пдф на печать, потому что проектировал не в спринте. Там как для обычной печати, с помощью тонера, так и на фоторезист есть. В общем разберетесь.<br /><a href="https://disk.yandex.ru/d/KLcK_ObWfXx6EA">https://disk.yandex.ru/d/KLcK_ObWfXx6EA</a></p>]]></description>
			<author><![CDATA[null@example.com (zhikovpavlik2003)]]></author>
			<pubDate>Sun, 23 Apr 2023 13:21:36 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7769#p7769</guid>
		</item>
		<item>
			<title><![CDATA[Re: Минималистичное переключение меню TDA7419]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7768#p7768</link>
			<description><![CDATA[<p>Спасибо вам! Печатки сегодня-завтра сюда прикреплю.</p>]]></description>
			<author><![CDATA[null@example.com (zhikovpavlik2003)]]></author>
			<pubDate>Sat, 22 Apr 2023 13:40:49 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7768#p7768</guid>
		</item>
		<item>
			<title><![CDATA[Re: Минималистичное переключение меню TDA7419]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7767#p7767</link>
			<description><![CDATA[<div class="codebox"><pre><code>#define SW       10  // pin SW ENCODER
#define CLK       9  // pin CLK ENCODER
#define DT        8  // pin CLK ENCODER
#define IR       12  // pin IR input


#include &lt;Wire.h&gt;
#include &lt;TDA7419.h&gt;
#include &lt;EEPROM.h&gt;
#include &lt;Encoder.h&gt;
#include &lt;MsTimer2.h&gt;
#include &lt;IRremote.h&gt;           // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip
#include &lt;LiquidCrystal_I2C.h&gt;  // http://forum.rcl-radio.ru/misc.php?action=pan_download&amp;item=45&amp;download=1
Encoder myEnc(CLK, DT);
LiquidCrystal_I2C lcd(0x27,16,2); 
IRrecv irrecv(IR); 
TDA7419 tda;
decode_results ir; 


byte v1[8] = {0b00111,0b00111,0b00111,0b00111,0b00111,0b00111,0b00111,0b00111};
byte v2[8] = {0b00111,0b00111,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};      
byte v3[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};
byte v4[8] = {0b11111,0b11111,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};
byte v5[8] = {0b11100,0b11100,0b00000,0b00000,0b00000,0b00000,0b11100,0b11100};
byte v6[8] = {0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b11100};
byte v7[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00111,0b00111};
byte v8[8] = {0b11111,0b11111,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000}; 
unsigned long times,oldPosition  = -999,newPosition,tim;
 byte a[6],d1,d2,d3,d4,d5,d6,e1,e2,e3,x;
  int menu,bas,w,w1,vol_d,bass_d,treble_d,middle,middle_reg,z,in,treb,bass_reg,bass;
  int gain0,gain1,gain2,gain3,gain_d,set,vol_reg,mute_reg,in_reg,treb_reg,menu0,power;
  int lon, lon_f, lon_d,out,vol_out,rf,lf,rt,lt,sab,treb_c,mid_c,bas_c,sab_f,mute=1;
  bool w2,w3,w4;
  int tic;



void setup(){
  lcd.init();lcd.backlight();Serial.begin(9600);irrecv.enableIRIn();
  lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);
  lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);
  pinMode(SW,INPUT);// SW ENCODER
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  if(EEPROM.read(100)!=0){for(int i=0;i&lt;101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении 
  vol_reg = EEPROM.read(0);treb_reg = EEPROM.read(1)-100;middle_reg = EEPROM.read(2)-100;bass_reg = EEPROM.read(3)-100;in = EEPROM.read(4);
  lon_f = EEPROM.read(5);lon = EEPROM.read(6);
  rf = EEPROM.read(7);lf = EEPROM.read(8);rt = EEPROM.read(9);lt = EEPROM.read(10);sab = EEPROM.read(11);

  }

void loop(){
//// BUTTON ENCODER MENU MENU2 //////////////////////////////////////////////////////////
  if(digitalRead(SW)==LOW &amp;&amp; w3==0){menu++;tic++;if(menu&gt;4){menu=0;}delay(200);times=millis();w=1;w2=1;cl();}
  if(digitalRead(SW)==HIGH){tic=0;}
  if(tic==4){menu=100;w3=1;lcd.setCursor(0,0);lcd.print(&quot;     MENU 2     &quot;);delay(1500);cl();menu0=1;}
  if(digitalRead(SW)==LOW &amp;&amp; w3==1){menu0++;if(menu0&gt;11){menu0=1;}delay(200);times=millis();w=1;w2=1;cl();}
 
  
////////////// VOLUME ///////////////////////////////////////////////////////////////////
 if(menu==0){
 
   if (newPosition != oldPosition){oldPosition = newPosition;vol_reg=vol_reg-newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;vol_func();audio();}
   a[0]= (80-vol_reg)/10;a[1]=(80-vol_reg)%10;
   for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
   if(mute_reg==0){lcd.setCursor(0,0);lcd.print(&quot;VOLUME&quot;);}else{lcd.setCursor(0,0);lcd.print(&quot;MUTE&quot;);}
   lcd.setCursor(0,1);lcd.print(&quot;INPUT &quot;);lcd.print(in);
  }

////////////// TREBLE ///////////////////////////////////////////////////////////////////
 if(menu==1){
 
   if (newPosition != oldPosition){oldPosition = newPosition;treb_reg=treb_reg+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;treb_func();audio();}
   if(treb_reg&lt;0){lcd.setCursor(9,0);treb=abs(treb_reg);lcd.write((uint8_t)3);}else{treb=treb_reg;lcd.setCursor(9,0);lcd.print(&quot; &quot;);}
   a[0]= treb/10;a[1]=treb%10;
   for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
   lcd.setCursor(0,0);lcd.print(&quot;TREBLE&quot;);lcd.setCursor(0,1);lcd.print(&quot;CONTROL&quot;);
   }    

////////////// MIDDLE ///////////////////////////////////////////////////////////////////
 if(menu==2){
 
   if (newPosition != oldPosition){oldPosition = newPosition;middle_reg=middle_reg+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;mid_func();audio();}
   if(middle_reg&lt;0){lcd.setCursor(9,0);middle=abs(middle_reg);lcd.write((uint8_t)3);}else{middle=middle_reg;lcd.setCursor(9,0);lcd.print(&quot; &quot;);}
   a[0]= middle/10;a[1]=middle%10;
   for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
   lcd.setCursor(0,0);lcd.print(&quot;MIDDLE&quot;);lcd.setCursor(0,1);lcd.print(&quot;CONTROL&quot;);
   }   

////////////// BASS ///////////////////////////////////////////////////////////////////
 if(menu==3){
 
   if (newPosition != oldPosition){oldPosition = newPosition;bass_reg=bass_reg+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;bass_func();audio();}
   if(bass_reg&lt;0){lcd.setCursor(9,0);bass=abs(bass_reg);lcd.write((uint8_t)3);}else{bass=bass_reg;lcd.setCursor(9,0);lcd.print(&quot; &quot;);}
   a[0]= bass/10;a[1]=bass%10;
   for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
   lcd.setCursor(0,0);lcd.print(&quot;BASS&quot;);lcd.setCursor(0,1);lcd.print(&quot;CONTROL&quot;);
   }  

////////////// INPUT ///////////////////////////////////////////////////////////////////
 if(menu==4){
 
   if (newPosition != oldPosition){oldPosition = newPosition;in=in+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;in_func();audio();}
   a[0]= in;
   for(x=0;x&lt;1;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
   lcd.setCursor(0,0);lcd.print(&quot;INPUT&quot;);lcd.setCursor(0,1);lcd.print(&quot;CONTROL&quot;);
   }   

////////////////////////////////////////////////////////////////////////////////////////
///// MENU2 ////////////////////////////////////////////////////////////////////////////
////////////// LOUDNESS ///////////////////////////////////////////////////////////////////
 if(menu0==1){
 
   if (newPosition != oldPosition){oldPosition = newPosition;lon_f=lon_f+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;lon_f_func();audio();}
   lcd.setCursor(0,0);lcd.print(&quot;LOUDNESS&quot;);lcd.setCursor(0,1);lcd.print(&quot;CENTER FREQUENCY&quot;);
   lcd.setCursor(10,0);
   switch(lon_f){
    case 0: lcd.print(&quot;FLAT  &quot;);break;
    case 1: lcd.print(&quot;400Hz &quot;);break;
    case 2: lcd.print(&quot;800Hz &quot;);break;
    case 3: lcd.print(&quot;2400Hz&quot;);break;}
   }   

 ////////////// LOUDNESS GAIN ///////////////////////////////////////////////////////////////////
 if(menu0==2){
 
   if (newPosition != oldPosition){oldPosition = newPosition;lon=lon+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;lon_func();audio();}
   a[0]= lon/10;a[1]=lon%10;
   for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
   lcd.setCursor(0,0);lcd.print(&quot;LOUDNESS&quot;);lcd.setCursor(0,1);lcd.print(&quot;GAIN&quot;);
   } 

//////////////// TREBLE FREQ /////////////////////////////////////////////////////////////////////
 if(menu0==3){
 
   if (newPosition != oldPosition){oldPosition = newPosition;treb_c=treb_c+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;treb_c_func();audio();}
   lcd.setCursor(0,0);lcd.print(&quot;TREBLE&quot;);lcd.setCursor(0,1);lcd.print(&quot;CENTER FREQUENCY&quot;);
   lcd.setCursor(8,0);
   switch(treb_c){
    case 0: lcd.print(&quot;10.0 kHz&quot;);break;
    case 1: lcd.print(&quot;12.5 kHz&quot;);break;
    case 2: lcd.print(&quot;15.0 kHz&quot;);break;
    case 3: lcd.print(&quot;17.5 kHz&quot;);break;}
   }   

//////////////// MIDDLE FREQ /////////////////////////////////////////////////////////////////////
 if(menu0==4){
 
   if (newPosition != oldPosition){oldPosition = newPosition;mid_c=mid_c+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;mid_c_func();audio();}
   lcd.setCursor(0,0);lcd.print(&quot;MIDDLE&quot;);lcd.setCursor(0,1);lcd.print(&quot;CENTER FREQUENCY&quot;);
   lcd.setCursor(9,0);
   switch(mid_c){
    case 0: lcd.print(&quot;0.5 kHz&quot;);break;
    case 1: lcd.print(&quot;1.0 kHz&quot;);break;
    case 2: lcd.print(&quot;1.5 kHz&quot;);break;
    case 3: lcd.print(&quot;2.5 kHz&quot;);break;}
   }  

//////////////// BASS FREQ /////////////////////////////////////////////////////////////////////
 if(menu0==5){
 
   if (newPosition != oldPosition){oldPosition = newPosition;bas_c=bas_c+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;bas_c_func();audio();}
   lcd.setCursor(0,0);lcd.print(&quot;BASS&quot;);lcd.setCursor(0,1);lcd.print(&quot;CENTER FREQUENCY&quot;);
   lcd.setCursor(9,0);
   switch(bas_c){
    case 0: lcd.print(&quot;60  Hz&quot;);break;
    case 1: lcd.print(&quot;80  Hz&quot;);break;
    case 2: lcd.print(&quot;100 Hz&quot;);break;
    case 3: lcd.print(&quot;200 Hz&quot;);break;}
   } 

//////////////// SUBWOOFER FREQ /////////////////////////////////////////////////////////////////////
 if(menu0==6){
 
   if (newPosition != oldPosition){oldPosition = newPosition;sab_f=sab_f+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;sab_f_func();audio();}
   lcd.setCursor(0,0);lcd.print(&quot;SUBWOOFER&quot;);lcd.setCursor(0,1);lcd.print(&quot;CENTER FREQUENCY&quot;);
   lcd.setCursor(10,0);
   switch(sab_f){
    case 0: lcd.print(&quot;FLAT  &quot;);break;
    case 1: lcd.print(&quot;80  Hz&quot;);break;
    case 2: lcd.print(&quot;120 Hz&quot;);break;
    case 3: lcd.print(&quot;160 Hz&quot;);break;}
   }   

 ////////////// RF GAIN ///////////////////////////////////////////////////////////////////
 if(menu0==7){
 
   if (newPosition != oldPosition){oldPosition = newPosition;rf=rf+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;rf_func();audio();}
   a[0]= rf/10;a[1]=rf%10;
   for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
   lcd.setCursor(0,0);lcd.print(&quot;RF_OUT&quot;);lcd.setCursor(0,1);lcd.print(&quot;GAIN&quot;);
   }  
 ////////////// LF GAIN ///////////////////////////////////////////////////////////////////
 if(menu0==8){
 
   if (newPosition != oldPosition){oldPosition = newPosition;lf=lf+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;lf_func();audio();}
   a[0]= lf/10;a[1]=lf%10;
   for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
   lcd.setCursor(0,0);lcd.print(&quot;LF_OUT&quot;);lcd.setCursor(0,1);lcd.print(&quot;GAIN&quot;);
   }  
 ////////////// RT GAIN ///////////////////////////////////////////////////////////////////
 if(menu0==9){
 
   if (newPosition != oldPosition){oldPosition = newPosition;rt=rt+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;rt_func();audio();}
   a[0]= rt/10;a[1]=rt%10;
   for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
   lcd.setCursor(0,0);lcd.print(&quot;RT_OUT&quot;);lcd.setCursor(0,1);lcd.print(&quot;GAIN&quot;);
   }
 ////////////// LT GAIN ///////////////////////////////////////////////////////////////////
 if(menu0==10){
 
   if (newPosition != oldPosition){oldPosition = newPosition;lt=lt+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;lt_func();audio();}
   a[0]= lt/10;a[1]=lt%10;
   for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
   lcd.setCursor(0,0);lcd.print(&quot;LT_OUT&quot;);lcd.setCursor(0,1);lcd.print(&quot;GAIN&quot;);
   }    
 ////////////// SAB GAIN ///////////////////////////////////////////////////////////////////
 if(menu0==11){
 
   if (newPosition != oldPosition){oldPosition = newPosition;sab=sab+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;w2=1;sab_func();audio();}
   a[0]= sab/10;a[1]=sab%10;
   for(x=0;x&lt;2;x++){switch(x){case 0: e1=10,e2=11,e3=12;break;case 1: e1=13,e2=14,e3=15;break;}digit();}
   lcd.setCursor(0,0);lcd.print(&quot;SAB_OUT&quot;);lcd.setCursor(0,1);lcd.print(&quot;GAIN&quot;);
   }                

            

//// EEPROM ///////////////////////////////////////
 if(millis()-times&gt;5000 &amp;&amp; w==1 &amp;&amp; mute==1 &amp;&amp; power==0){
 EEPROM.update(0,vol_reg);EEPROM.update(1,treb_reg+100);EEPROM.update(2,middle_reg+100);EEPROM.update(3,bass_reg+100);EEPROM.update(4,in);
 EEPROM.update(5,lon_f);EEPROM.update(6,lon);
 EEPROM.update(7,rf);EEPROM.update(8,lf);EEPROM.update(9,rt);EEPROM.update(10,lt);EEPROM.update(11,sab);
 menu=0;menu0=100;w=0;w2=1;w3=0;tic=0;cl();
}    
  }// END LOOP 


void rf_func(){if(rf&gt;15){rf=15;}if(rf&lt;0){rf=0;}}
void lf_func(){if(lf&gt;15){lf=15;}if(lf&lt;0){lf=0;}}
void rt_func(){if(rt&gt;15){rt=15;}if(rt&lt;0){rt=0;}}
void lt_func(){if(lt&gt;15){lt=15;}if(lt&lt;0){lt=0;}}
void sab_func(){if(sab&gt;15){sab=15;}if(sab&lt;0){sab=0;}}
void sab_f_func(){if(sab_f&gt;3){sab_f=3;}if(sab_f&lt;0){sab_f=0;}}
void bas_c_func(){if(bas_c&gt;3){bas_c=3;}if(bas_c&lt;0){bas_c=0;}}
void mid_c_func(){if(mid_c&gt;3){mid_c=3;}if(mid_c&lt;0){mid_c=0;}}
void treb_c_func(){if(treb_c&gt;3){treb_c=3;}if(treb_c&lt;0){treb_c=0;}}
void lon_func(){if(lon&gt;15){lon=15;}if(lon&lt;0){lon=0;}}
void lon_f_func(){if(lon_f&gt;3){lon_f=3;}if(lon_f&lt;0){lon_f=0;}}
void in_func(){if(in&gt;3){in=3;}if(in&lt;1){in=1;}}
void bass_func(){if(bass_reg&gt;15){bass_reg=15;}if(bass_reg&lt;-15){bass_reg=-15;}}
void mid_func(){if(middle_reg&gt;15){middle_reg=15;}if(middle_reg&lt;-15){middle_reg=-15;}}
void vol_func(){if(vol_reg&gt;79){vol_reg=79;}if(vol_reg&lt;0){vol_reg=0;}}
void treb_func(){if(treb_reg&gt;15){treb_reg=15;}if(treb_reg&lt;-15){treb_reg=-15;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(200);}  

void audio(){
  tda.setInput(in,gain0,0);    //вх1=1, вх2=2, вх3=3
  tda.setInput2(0,0,0);   // не используется
  tda.setAtt_loudness(lon,lon_f,0,0);
  tda.setSoft(mute,0,0,0,0);//mute off (не менять)
  tda.setVolume(vol_reg-79,0);   // общая громкость от 0 до 79 макс
  tda.setAtt_LF(64+lf,0);   // гром. лк фронт
  tda.setAtt_RF(64+rf,0);   // гром. пк фронт
  tda.setAtt_LT(64+lt,0);   // гром. лк тыл
  tda.setAtt_RT(64+rt,0);   // гром. пк тыл
  tda.setAtt_SUB(64+sab,0);  // гром. савбуфер
  tda.setAtt_Mix(79,0);   // не использует
  tda.setFilter_Treble(treb_reg,treb_c,0);
  tda.setFilter_Middle(middle_reg,0,0);
  tda.setFilter_Bass(bass_reg,0,0);
  tda.setSub_M_B(sab_f,mid_c,bas_c,0,0);
  tda.setMix_Gain_Eff(1,0,0,0,0); // не используется
  tda.setSpektor(0,0,1,0,1,0,0);
}  

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

void digit(){switch(a[x]){
case 0: d1=1,d2=8,d3=6,d4=1,d5=3,d6=6;break;case 1: d1=32,d2=2,d3=6,d4=32,d5=32,d6=6;break;
case 2: d1=2,d2=8,d3=6,d4=1,d5=4,d6=5;break;case 3: d1=2,d2=4,d3=6,d4=7,d5=3,d6=6;break;
case 4: d1=1,d2=3,d3=6,d4=32,d5=32,d6=6;break;case 5: d1=1,d2=4,d3=5,d4=7,d5=3,d6=6;break;
case 6: d1=1,d2=4,d3=5,d4=1,d5=3,d6=6;break;case 7: d1=1,d2=8,d3=6,d4=32,d5=32,d6=6;break;
case 8: d1=1,d2=4,d3=6,d4=1,d5=3,d6=6;break;case 9: d1=1,d2=4,d3=6,d4=7,d5=3,d6=6;break;}
lcd.setCursor(e1,0);lcd.write((uint8_t)d1);lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);
lcd.setCursor(e1,1);lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);}  </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Sat, 22 Apr 2023 13:39:09 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7767#p7767</guid>
		</item>
		<item>
			<title><![CDATA[Re: Минималистичное переключение меню TDA7419]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7766#p7766</link>
			<description><![CDATA[<p>Забыл еще написать, когда громкость уменьшается на дисплее до 0, она наоборот поднимается на самой микросхеме</p>]]></description>
			<author><![CDATA[null@example.com (zhikovpavlik2003)]]></author>
			<pubDate>Sat, 22 Apr 2023 08:18:53 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7766#p7766</guid>
		</item>
		<item>
			<title><![CDATA[Re: Минималистичное переключение меню TDA7419]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7765#p7765</link>
			<description><![CDATA[<p>ИК не буду использовать, так что можно без него.</p>]]></description>
			<author><![CDATA[null@example.com (zhikovpavlik2003)]]></author>
			<pubDate>Sat, 22 Apr 2023 08:17:39 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7765#p7765</guid>
		</item>
	</channel>
</rss>
