<?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=46</link>
		<atom:link href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=46&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «TDA7419 + энкодер + ИК пульт + анализатор спектра».]]></description>
		<lastBuildDate>Thu, 01 May 2025 09:08:17 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: TDA7419 + энкодер + ИК пульт + анализатор спектра]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11793#p11793</link>
			<description><![CDATA[<p>I have tested the circuit and adjusted the function. I noticed that the Loundness function has no response. I connected the signal to listen to 2 channels. Left, right</p>]]></description>
			<author><![CDATA[null@example.com (pued1970)]]></author>
			<pubDate>Thu, 01 May 2025 09:08:17 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11793#p11793</guid>
		</item>
		<item>
			<title><![CDATA[Re: TDA7419 + энкодер + ИК пульт + анализатор спектра]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11469#p11469</link>
			<description><![CDATA[<p>The display libraries are incompatible, requiring a lot of changes in the sketch.</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Thu, 13 Mar 2025 16:14:46 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11469#p11469</guid>
		</item>
		<item>
			<title><![CDATA[Re: TDA7419 + энкодер + ИК пульт + анализатор спектра]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11468#p11468</link>
			<description><![CDATA[<div class="codebox"><pre><code>// ENCODER
#define CLK_ENC  3
#define TD_ENC   2
#define SW_ENC   4
// BUTTON
#define IN       5
#define SET      6
#define MUTE     7
// OUTPUT_LED_MUTE
#define OUT_MUTE 13

#include &lt;Wire.h&gt; 
#include &lt;TDA7419.h&gt;           // https://github.com/liman324/TDA7419.git
#include &lt;EEPROM.h&gt;
//#include &lt;UTFT.h&gt;              // http://rcl-radio.ru/wp-content/uploads/2019/06/UTFT.zip
#include &lt;Encoder.h&gt;           // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip 
#include &lt;MsTimer2.h&gt;          // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include &lt;Adafruit_GFX.h&gt;    // Core graphics library
#include &lt;Adafruit_ST7789.h&gt; // Hardware-specific library for ST7789
#include &lt;SPI.h&gt; 

TDA7419 tda;
Encoder myEnc(CLK_ENC, TD_ENC);
//UTFT tft(TFT01_22SP, 8, 9, 12, 11, 10); // SDI (MOSI), SCK, CS, RESET, DC
  #define TFT_CS        10
  #define TFT_RST        9 // Or set to -1 and connect to Arduino RESET pin
  #define TFT_DC         8
//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
  #define TFT_MOSI 11  // Data out 11
  #define TFT_SCLK 13  // Clock out 13
  Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
extern uint8_t BigFont[];
int menu,menu0=100,vol,treb,mid,bass,bass_q,mid_q,bass_c,treb_c=3,mid_c,sub_c,in,gain,gain1,gain2,gain3;
int lf,rf,lt,rt,sab,att_loun,s_loun,f;
long oldPosition  = -999,newPosition,times;
bool w1=1,w2=1,w3=1,w4=1;
bool st=1,menu_set=0,mute=1,eep,h1=1,h2=1,h3=1,h4=1,in1=1,h5=1,h6=1;
bool ss=0,w10,w11,w12,w13,w14,w15,w16,w17,w18,w19,w20,w21,w22;
int i;

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

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

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

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

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

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

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

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

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

void audio(){
tda.setInput(in+1,gain*2,0);    //вх1=1, вх2=2, вх3=3
tda.setInput2(2,0,0);   // не используется
tda.setAtt_loudness(att_loun,s_loun,0,0);
tda.setSoft(mute,0,0,0,0);//mute off (не менять)
tda.setVolume(vol-79,0);   // общая громкость от 0 до 79 макс
tda.setAtt_LF(79-(lf*2),0);   // гром. лк фронт
tda.setAtt_RF(79-(rf*2),0);   // гром. пк фронт
tda.setAtt_LT(79-(lt*2),0);   // гром. лк тыл
tda.setAtt_RT(79-(rt*2),0);   // гром. пк тыл
tda.setAtt_SUB(79-(sab*2),0);  // гром. савбуфер
tda.setAtt_Mix(79,0);   // не используется
tda.setFilter_Treble(treb,treb_c,0); 
tda.setFilter_Middle(mid,mid_q,0);
tda.setFilter_Bass(bass,bass_q,0);
tda.setSub_M_B(sub_c,mid_c,bass_c,0,0);
tda.setMix_Gain_Eff(1,0,0,0,0); // не используется
tda.setSpektor(0,0,0,0,0,0,0);
}</code></pre></div><br /><p>exit status 1<br />&#039;print&#039; was not declared in this scope</p>]]></description>
			<author><![CDATA[null@example.com (pued1970)]]></author>
			<pubDate>Thu, 13 Mar 2025 15:59:23 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11468#p11468</guid>
		</item>
		<item>
			<title><![CDATA[Re: TDA7419 + энкодер + ИК пульт + анализатор спектра]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11465#p11465</link>
			<description><![CDATA[<p><a href="http://rcl-radio.ru/?p=129453">http://rcl-radio.ru/?p=129453</a></p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Wed, 12 Mar 2025 11:40:44 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11465#p11465</guid>
		</item>
		<item>
			<title><![CDATA[Re: TDA7419 + энкодер + ИК пульт + анализатор спектра]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11464#p11464</link>
			<description><![CDATA[<p>I can do it according to the program below, it shows the screen and has full sound, but I want to display 20x4 and show the time like TDA7719. Do you have time?</p><div class="codebox"><pre><code>#define IR_1 0x2FDD02F // Button up
#define IR_2 0x2FD32CD // Button down
#define IR_3 0x20DF40BF // Button &gt;
#define IR_4 0x20DFC03F // Button &lt;
#define IR_5 0x20DFD02F // Button IN
#define IR_6 0x2FDCA35 // 
#define IR_7 0x2FDA857 // 
#define IR_8 0x20DF10EF // POWER
#define IR_9 0xFF6897 // SET

#include &lt;Wire.h&gt; 
#include &lt;TDA7419.h&gt;
#include &lt;EEPROM.h&gt;
#include &lt;LiquidCrystal_I2C.h&gt;
LiquidCrystal_I2C lcd(0x27,20,4);  // Installing the display
#include &lt;Encoder.h&gt;
#include &lt;MsTimer2.h&gt;
#include &lt;boarddefs.h&gt;
#include &lt;IRremote.h&gt;
#include &lt;DS3231.h&gt;
  TDA7419 tda;
  DS3231 clock;RTCDateTime DateTime;
  IRrecv irrecv(12); // we indicate the output of the IR receiver module
  Encoder myEnc(9, 8);//CLK, DT
  decode_results ir;
  boolean  w,w2,www,mute=1,gr1,gr2;
  byte z,z0,z1,gain1,gain2,gain3,gain_d,rf,lf,rt,lt,sab, in_d,lon_f,lon_d, bass_d,treb_d,middle_d;
  int menu,vol,bass,treb,middle,in,gain0,radio,vol_d;
  int lon,out,vol_out,treb_c,mid_c,bas_c,sab_f;
  unsigned long time,oldPosition  = -999,newPosition;
  unsigned long last_pressed,time_fm;
  unsigned char buf[5];
  int stereo,signal_level,search_mode = 0,search_direction,i,f_h,f_l,f,w_fm,fm_up,fm_down,standby;

void setup(){
     Serial.begin(9600);Wire.begin();lcd.init();irrecv.enableIRIn(); // запускаем модуль IR
     lcd.backlight();lcd.setCursor(0,0);lcd.print(&quot;  Sound Processor   &quot;);lcd.setCursor(0,1);lcd.print(&quot;     P&amp;I AUDIO      &quot;);delay(3000);lcd.clear();// ЗАСТАВКА
     pinMode(10,INPUT);// MENU SW encoder BUTTON
     pinMode(3,INPUT_PULLUP);// INPUT SELECT BUTTON IN 11
     pinMode(13,OUTPUT);// STANDBY
     pinMode(A2,INPUT);// POWER
     pinMode(A3,INPUT);// BUTTON SET A3
     ADMUX  = 0b01100000; ADCSRA = 0b11010100; 
     MsTimer2::set(3, to_Timer);MsTimer2::start(); // ENABLE INTERRUPT FOR ENCODER
  /// we read all settings from memory when turned on
   ////if(EEPROM.read(200)!=0){for(int i=0;i&lt;201;i++){EEPROM.update(i,0);}}// Clear memory on first power-on 
   vol = EEPROM.read(0);treb = EEPROM.read(1)-15;middle = EEPROM.read(3)-15;bass = EEPROM.read(3)-15;
   in = EEPROM.read(4);gain1 = EEPROM.read(5);gain2 = EEPROM.read(6);gain3 = EEPROM.read(7);
   lon = EEPROM.read(8);lon_f = EEPROM.read(9);rf = EEPROM.read(10);lf = EEPROM.read(11);
   rt = EEPROM.read(12);lt = EEPROM.read(13);sab = EEPROM.read(14);treb_c = EEPROM.read(15);
   mid_c = EEPROM.read(16);bas_c = EEPROM.read(17);sab_f = EEPROM.read(18);
   audio();
}

void loop(){
   if(radio==0){
      byte a1[8] = {0b00000,0b10101,0b10101,0b10101,0b10101,0b10101,0b10101,0b00000};
      byte a2[8] = {0b00000,0b10100,0b10100,0b10100,0b10100,0b10100,0b10100,0b00000};
      byte a3[8] = {0b00000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b00000};
      lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);
    }else{
      byte b1[8]={0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11111};
      byte b2[8]={0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111};
      byte b3[8]={0b00000,0b00000,0b00000,0b00000,0b00000,0b11111,0b11111,0b11111};
      byte b4[8]={0b00000,0b00000,0b00000,0b00000,0b11111,0b11111,0b11111,0b11111};
      byte b5[8]={0b00000,0b00000,0b00000,0b11111,0b11111,0b11111,0b11111,0b11111};
      byte b6[8]={0b00000,0b00000,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111};
      byte b7[8]={0b00000,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111};
      byte b8[8]={0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11111};
      lcd.createChar(0,b1);lcd.createChar(1,b2);lcd.createChar(2,b3);lcd.createChar(3,b4);lcd.createChar(4,b5);lcd.createChar(5,b6);lcd.createChar(6,b7);lcd.createChar(7,b8);
      }
      
   if(standby==1){menu=200;lcd.setCursor(0,0);lcd.print(&quot;     POWER  OFF    &quot;);delay(1000);lcd.noBacklight();}
   if(analogRead(A2)&gt;900&amp;&amp;standby==1){standby=0;mute=1;audio();lcd.clear();lcd.setCursor(0,0);lcd.backlight();lcd.print(&quot;     POWER   ON    &quot;);digitalWrite(13,HIGH);delay(2000);cl();menu=0;w2=1;}
   if(analogRead(A2)&gt;900&amp;&amp;standby==0){standby=1;mute=0;audio();lcd.clear();digitalWrite(13,LOW);delay(500);menu=200;}
  if(standby==0){
  if(digitalRead(10)==LOW){menu++;cl();time=millis();radio=0;w=1;w2=1;if(menu&gt;4){menu=0;}}// меню
  if(digitalRead(3)==HIGH&amp;&amp;menu&lt;5){in++;;cl();radio=0;time=millis()-7000;w=1;w2=1;www=1;menu=4;if(in&gt;3){in=1;};audio();}// КНОПКА ВЫБОРА ВХОДА IN
  if(ir.value==IR_9||analogRead(A3)&gt;900&amp;&amp;menu&lt;5){menu=5;cl();radio=0;time=millis();w=1;w2=1;}// меню 2 включение меню 2
  if(ir.value==IR_9||analogRead(A3)&gt;900&amp;&amp;menu&gt;=5){menu++;cl();radio=0;time=millis();w=1;w2=1;if(menu&gt;10){menu=0;}}// перебор меню 2 и выход в меню громкости
//  if((analogRead(A0)&gt;900||analogRead(A1)&gt;900)&amp;&amp;radio==0){radio=1;w=1;lcd.clear();delay(300);menu=100;}
  }

   ////////////////// IR receiver - processing of button codes ///////////////////////////////////////
  if ( irrecv.decode( &amp;ir )) {Serial.print(&quot;0x&quot;);Serial.println( ir.value,HEX);irrecv.resume();time=millis();w=1;}// IR приемник - чтение, в мониторе порта отображаются коды кнопок
  if(ir.value==0){gr1=0;gr2=0;}
  if(standby==0){
  if(ir.value==IR_1){menu++;gr1=0;gr2=0;cl();radio=0;time=millis();w=1;w2=1;if(menu&gt;4){menu=0;}}// menu button up
  if(ir.value==IR_2){menu--;gr1=0;gr2=0;cl();radio=0;time=millis();w=1;w2=1;if(menu&lt;0){menu=4;}}// menu button down
  if(ir.value==IR_5&amp;&amp;menu&lt;5){in++;cl();radio=0;time=millis()-7000;w=1;w2=1;www=1;menu=4;if(in&gt;3){in=1;};gr1=0;gr2=0;audio();}// IN

  if(ir.value==IR_6){fm_up=1;gr1=0;gr2=0;radio=1;w=1;menu=100;ir.value=0;}
  if(ir.value==IR_7){fm_down=1;gr1=0;gr2=0;radio=1;w=1;menu=100;ir.value=0;}
  }
  if(ir.value==IR_8&amp;&amp;standby==1){standby=0;mute=1;audio();gr1=0;gr2=0;cl();lcd.setCursor(0,0);lcd.backlight();lcd.print(&quot;   POWER   ON   &quot;);digitalWrite(13,HIGH);delay(2000);cl();menu=0;w2=1;}//IR power on
  if(ir.value==IR_8&amp;&amp;standby==0){standby=1;mute=0;audio();gr1=0;gr2=0;cl();digitalWrite(13,LOW);delay(500);menu=200;}//IR power off

 
/////////////////////////////// VOLUME -80 ... 0 dB ////////////////////////////////////////////////
 if(menu==0){radio=0;
     if(ir.value==IR_3){vol++;gr1=1;gr2=0;cl1();w2=1;vol_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){vol++;gr2=0;cl1();w2=1;vol_func();audio();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){vol--;gr1=0;gr2=1;cl1();w2=1;vol_func();audio();}// кнопка &lt;
     if(ir.value==0xFFFFFFFF and gr2==1){vol--;gr1=0;cl1();w2=1;vol_func();audio();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;
   
   if (newPosition != oldPosition){oldPosition = newPosition;
     vol=vol+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;vol_func();audio();} 
     lcd.setCursor(0,0);lcd.print(&quot;VOLUME  &quot;);
     lcd.print(&quot; &quot;);lcd.print(-80+vol);lcd.print(&quot; &quot;);lcd.setCursor(18,0);lcd.print(&quot;dB&quot;);vol_d=vol-20;
   if(w2==1){
   for(z=0,z0=0,z1=0;z&lt;=vol_d;z++,z1++){if(z1&gt;2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1,1);lcd.print(&quot;   &quot;);}}
   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;}}
 
 ///////////////////////// TREBLE +/-15 dB /////////////////////////////////////////////////////////
   if(menu==1){
     if(ir.value==IR_3){treb++;gr1=1;gr2=0;cl1();w2=1;treb_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){treb++;gr2=0;cl1();w2=1;treb_func();audio();}// button &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){treb--;gr1=0;gr2=1;cl1();w2=1;treb_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){treb--;gr1=0;cl1();w2=1;treb_func();audio();}// button &lt;&lt;&lt;&lt;&lt;&lt;
    
     if (newPosition != oldPosition) {
    oldPosition = newPosition;
    treb=treb+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;treb_func();audio();} 
   lcd.setCursor(0,0);lcd.print(&quot;TREBLE  &quot;);
   lcd.print(&quot; &quot;);lcd.print(treb);lcd.print(&quot; &quot;);lcd.setCursor(18,0);lcd.print(&quot;dB&quot;);treb_d=treb+15;
   if(w2==1){
   for(z=0,z0=0,z1=0;z&lt;=treb_d;z++,z1++){if(z1&gt;2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+5,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+5,1);lcd.print(&quot;     &quot;);}}
   if(z1==3){lcd.setCursor(z0+5,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+5,1);lcd.write((uint8_t)2);}w2=0;}}

/////////////////////////// MIDDLE +/-15 dB ////////////////////////////////////////////////////////
   if(menu==2){
     if(ir.value==IR_3){middle++;gr1=1;gr2=0;cl1();w2=1;middle_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){middle++;gr2=0;cl1();w2=1;middle_func();audio();}// button &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){middle--;gr1=0;gr2=1;cl1();w2=1;middle_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){middle--;gr1=0;cl1();w2=1;middle_func();audio();}// button &lt;&lt;&lt;&lt;&lt;&lt;
    
     if (newPosition != oldPosition) {
    oldPosition = newPosition;
    middle=middle+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;middle_func();audio();} 
   lcd.setCursor(0,0);lcd.print(&quot;MIDDLE  &quot;);
   lcd.print(&quot; &quot;);lcd.print(middle);lcd.print(&quot; &quot;);lcd.setCursor(18,0);lcd.print(&quot;dB&quot;);middle_d=middle+15;
   if(w2==1){
   for(z=0,z0=0,z1=0;z&lt;=middle_d;z++,z1++){if(z1&gt;2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+5,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+5,1);lcd.print(&quot;     &quot;);}}
   if(z1==3){lcd.setCursor(z0+5,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+5,1);lcd.write((uint8_t)2);}w2=0;}}

 /////////////////////// BASS +/-15 dB ///////////////////////////////////////////////////////////
   if(menu==3){
     if(ir.value==IR_3){bass++;gr1=1;gr2=0;cl1();w2=1;bass_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){bass++;gr2=0;cl1();w2=1;bass_func();audio();}// button &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){bass--;gr1=0;gr2=1;cl1();w2=1;bass_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){bass--;gr1=0;cl1();w2=1;bass_func();audio();}// button &lt;&lt;&lt;&lt;&lt;&lt;  
    
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    bass=bass+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;bass_func();audio();} 
   lcd.setCursor(0,0);lcd.print(&quot;BASS    &quot;);
   lcd.print(&quot; &quot;);lcd.print(bass);lcd.print(&quot; &quot;);lcd.setCursor(17,0);lcd.print(&quot;dB&quot;);bass_d=bass+15;
   if(w2==1){
   for(z=0,z0=0,z1=0;z&lt;=bass_d;z++,z1++){if(z1&gt;2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+5,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+5,1);lcd.print(&quot;     &quot;);}}
   if(z1==3){lcd.setCursor(z0+5,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+5,1);lcd.write((uint8_t)2);}w2=0;}}
   
//////////////// IN + GAIN /////////////////////////////////////////////////////////////
   if(menu==4){ 
       switch(in){
     case 1: gain0 = gain1;break;
     case 2: gain0 = gain2;break;
     case 3: gain0 = gain3;break;
     }
     if(ir.value==IR_3){gain0++;gr1=1;gr2=0;cl1();w2=1;gain_func();audio();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){gain0++;gr2=0;cl1();w2=1;gain_func();audio();}// button &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){gain0--;gr1=0;gr2=1;cl1();w2=1;gain_func();audio();}// кнопка &lt; 
     if(ir.value==0xFFFFFFFF and gr2==1){gain0--;gr1=0;cl1();w2=1;gain_func();audio();}// button &lt;&lt;&lt;&lt;&lt;&lt;

    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    gain0=gain0+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;gain_func();audio();} 
   switch(in){
     case 1: gain1 = gain0;break;
     case 2: gain2 = gain0;break;
     case 3: gain3 = gain0;break;
     } 
    if(www==1){audio();www=0;}
  lcd.setCursor(0,0);lcd.print(&quot;GAIN IN &quot;);lcd.print(in);
      lcd.setCursor(10,0);lcd.print(&quot; &quot;);lcd.print(gain0);lcd.print(&quot; &quot;);lcd.setCursor(18,0);lcd.print(&quot;dB&quot;);gain_d=gain0*2;
      lcd.setCursor(0,1);if(in==1){lcd.print(&quot;BT &quot;);}else{lcd.print(&quot;     &quot;);}
//      lcd.setCursor(0,1);if(in==2)lcd.print(&quot;AUX &quot;); //else{lcd.print(&quot;     &quot;);}
//      lcd.setCursor(0,1);if(in==3){lcd.print(&quot;MMMC &quot;)};}else{lcd.print(&quot;     &quot;);}
   if(w2==1){
   for(z=0,z0=0,z1=0;z&lt;=gain_d;z++,z1++){if(z1&gt;2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+5,1);lcd.write((uint8_t)0);lcd.setCursor(z0+1+5,1);lcd.print(&quot;     &quot;);}}
   if(z1==3){lcd.setCursor(z0+5,1);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+5,1);lcd.write((uint8_t)2);}}w2=0;}

////////////////////////////// loudness ////////////////////////////////////////////////////
 if(menu==5){  
    if (newPosition != oldPosition) {
    oldPosition = newPosition;
    lon_f=lon_f+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(lon_f&gt;3){lon_f=0;}if(lon_f&lt;0){lon_f=3;}audio();} 

    lcd.setCursor(0,0);lcd.print(&quot;Loudness: &quot;);
      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 Att ////////////////////////////////////////////////
 if(menu==6){
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      lon=lon+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(lon&gt;15){lon=15;}if(lon&lt;0){lon=0;}audio();} 

   lcd.setCursor(0,0);lcd.print(&quot;Loud att&quot;);
   lcd.print(&quot; &quot;);lcd.print(-lon);lcd.print(&quot; &quot;);lcd.setCursor(18,0);lcd.print(&quot;dB&quot;);lon_d=lon*2;
   if(w2==1){
   for(z=0,z0=0,z1=0;z&lt;=lon_d;z++,z1++){if(z1&gt;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(&quot;   &quot;);}}
   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;}}
 
////////////////////////////////////////// out /////////////////////////////////////////////////
 if(menu==7){  
   if(digitalRead(11)==HIGH){out++;cl();www=1;w=1;if(out&gt;4){out=0;}audio();} // перебор выходов кнопкой IN
       switch(out){
          case 0:vol_out=rf;break;
          case 1:vol_out=lf;break;
          case 2:vol_out=rt;break;
          case 3:vol_out=lt;break;
          case 4:vol_out=sab;break;
          }
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      vol_out=vol_out+newPosition;myEnc.write(0);newPosition=0;time=millis();www=1;w=1;w2=1;if(vol_out&gt;15){vol_out=15;}if(vol_out&lt;0){vol_out=0;}audio();} 
      
   lcd.setCursor(0,0);lcd.print(&quot;Volume OUT&quot;);lcd.setCursor(0,1);
      switch(out){
   case 0:rf=vol_out;lcd.print(&quot;RF:  +&quot;);lcd.print(rf);break;
   case 1:lf=vol_out;lcd.print(&quot;LF:  +&quot;);lcd.print(lf);break;
   case 2:rt=vol_out;lcd.print(&quot;RT:  +&quot;);lcd.print(rt);break;
   case 3:lt=vol_out;lcd.print(&quot;LT:  +&quot;);lcd.print(lt);break;
   case 4:sab=vol_out;lcd.print(&quot;SUBW:  +&quot;);lcd.print(sab);break;
   }
    if(www==1){audio();www=0;}
  lcd.print(&quot; dB      &quot;);}
  
   /////////////////////////////////treble center//////////////////////////////////////////////////
 if(menu==8){ 
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      treb_c=treb_c+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(treb_c&gt;3){treb_c=0;}if(treb_c&lt;0){treb_c=3;}audio();} 
  
  lcd.setCursor(0,0);lcd.print(&quot;Treble Center &quot;);
  lcd.setCursor(1,6);
    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 center//////////////////////////////////////////////////
 if(menu==9){ 
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      mid_c=mid_c+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(mid_c&gt;3){mid_c=0;}if(mid_c&lt;0){mid_c=3;}audio();}   
    lcd.setCursor(0,0);lcd.print(&quot;Middle Center &quot;);
    lcd.setCursor(1,6);
      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 center/////////////////////////////////////////// 
 if(menu==10){ 
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      bas_c=bas_c+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(bas_c&gt;3){bas_c=0;}if(bas_c&lt;0){bas_c=3;}audio();}   
    lcd.setCursor(0,0);lcd.print(&quot;Bass Center &quot;);
    lcd.setCursor(1,6);
      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;}}
         
//////////////////////////////////////subw//////////////////////////////////////////////// 
 if(menu==11){ 
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      sab_f=sab_f+newPosition;myEnc.write(0);newPosition=0;time=millis();w=1;w2=1;if(sab_f&gt;3){sab_f=0;}if(sab_f&lt;0){sab_f=3;}audio();}   
    lcd.setCursor(0,0);lcd.print(&quot;Subwoofer Freq.&quot;);
    lcd.setCursor(1,6);
      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;}}
//////////////////////////////////////////////////////////////////////////////////////

 if(menu==100){ if(w==1){in=1;audio();w=0;}  // if (newPosition != oldPosition) {cl();menu=0;radio=0;}

 }
 ///////////////////////////////////////////////////////////////////////////////////
 
 if(millis()-time&gt;10000 &amp;&amp; w==1 &amp;&amp; radio==0){
     EEPROM.update(0,vol);EEPROM.update(1,treb+15);EEPROM.update(2,middle+15);EEPROM.update(3,bass+15);
     EEPROM.update(4,in);EEPROM.update(5,gain1);EEPROM.update(6,gain2);EEPROM.update(7,gain3);
     EEPROM.update(8,lon);EEPROM.update(9,lon_f);
     EEPROM.update(10,rf);EEPROM.update(11,lf);EEPROM.update(12,rt);EEPROM.update(13,lt);
     EEPROM.update(14,sab);EEPROM.update(15,treb_c);EEPROM.update(16,mid_c);EEPROM.update(17,bas_c);
     EEPROM.update(18,sab_f);
     menu=0;w=0;w2=1;cl();}

}//loop

 void gain_func(){if(gain0&lt;0){gain0=0;}if(gain0&gt;15){gain0=15;}}
 void bass_func(){if(bass&gt;15){bass=15;}if(bass&lt;-15){bass=-15;}} 
 void middle_func(){if(middle&gt;15){middle=15;}if(middle&lt;-15){middle=-15;}}
 void treb_func(){if(treb&gt;15){treb=15;}if(treb&lt;-15){treb=-15;}}
 void vol_func(){if(vol&lt;0){vol=0;}if(vol&gt;80){vol=80;}}
 void cl(){ir.value=0;delay(300);lcd.clear();}
 void cl1(){ir.value=0;delay(300);}
 void to_Timer(){newPosition = myEnc.read()/4;}

void audio(){
tda.setInput(in,gain0,0);    // in вх1=1, вх2=2, вх3=3
tda.setInput2(0,0,0);   // не используется
tda.setAtt_loudness(lon,lon_f,0,0);
tda.setSoft(mute,0,0,0,0);//mute off (не менять)
tda.setVolume(vol-79,0);   // общая громкость от 0 до 79 макс
tda.setAtt_LF(64+lf,0);   // гром. лк фронт
tda.setAtt_RF(64+rf,0);   // гром. пк фронт
tda.setAtt_LT(64+lt,0);   // гром. лк тыл
tda.setAtt_RT(64+rt,0);   // гром. пк тыл
tda.setAtt_SUB(64+sab,0);  // гром. савбуфер
tda.setAtt_Mix(79,0);   // не использует
tda.setFilter_Treble(treb,treb_c,0); 
tda.setFilter_Middle(middle,0,0);
tda.setFilter_Bass(bass,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);
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (pued1970)]]></author>
			<pubDate>Wed, 12 Mar 2025 07:08:46 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11464#p11464</guid>
		</item>
		<item>
			<title><![CDATA[Re: TDA7419 + энкодер + ИК пульт + анализатор спектра]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11463#p11463</link>
			<description><![CDATA[<p>Load the sketch — I2C scanner, which is available in the Arduino IDE, and check if the I2C address of the TDA is detected.</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Tue, 11 Mar 2025 11:20:57 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11463#p11463</guid>
		</item>
		<item>
			<title><![CDATA[Re: TDA7419 + энкодер + ИК пульт + анализатор спектра]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11462#p11462</link>
			<description><![CDATA[<p>Check all menu items; all settings should be within the working range. Also, pay attention to the output attenuators; there might be strong signal attenuation set.</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Tue, 11 Mar 2025 11:19:40 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11462#p11462</guid>
		</item>
		<item>
			<title><![CDATA[Re: TDA7419 + энкодер + ИК пульт + анализатор спектра]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11461#p11461</link>
			<description><![CDATA[<p>There is no sound but the screen works fine.<br />I have already designed the PCB and am waiting.</p><p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/03/3aa0ba39edf03178bb03cf2017ec6587.jpg" alt="http://forum.rcl-radio.ru/uploads/images/2025/03/3aa0ba39edf03178bb03cf2017ec6587.jpg" /></span> <br /><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/03/0ff19fa47998ac23e87116c01aee67e9.jpg" alt="http://forum.rcl-radio.ru/uploads/images/2025/03/0ff19fa47998ac23e87116c01aee67e9.jpg" /></span></p>]]></description>
			<author><![CDATA[null@example.com (pued1970)]]></author>
			<pubDate>Tue, 11 Mar 2025 07:43:42 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11461#p11461</guid>
		</item>
		<item>
			<title><![CDATA[Re: TDA7419 + энкодер + ИК пульт + анализатор спектра]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11460#p11460</link>
			<description><![CDATA[<p>I have a problem. The sound doesn&#039;t come out, but it can be compiled. Can you give me some advice?<br />I use TDA7419</p><div class="codebox"><pre><code>#define IR_1 0xFFC23D // Button up
#define IR_2 0xFF02FD // Button down
#define IR_3 0xFF906F //  &gt;
#define IR_4 0xFFA857 //  &lt;
#define IR_5 0xFF9867 //  IN
#define IR_6 0xFF629D //  SET
#define IR_7 0xFFE21D //  MUTE
#define IR_8 0xFFA25D //  STANDBY (POWER)
 
#define BRIG_H 200      // Brightness 0...255 POWER ON
#define BRIG_L 50       // Brightness 0...255 POWER OFF

#include &lt;TDA7419.h&gt;
#include &lt;Wire.h&gt;
#include &lt;LiquidCrystal_I2C.h&gt;  // http://forum.rcl-radio.ru/misc.php?action=pan_download&amp;item=45&amp;download=1
#include &lt;Encoder.h&gt;            // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip    
#include &lt;EEPROM.h&gt;
#include &lt;MsTimer2.h&gt;           // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip       
#include &lt;boarddefs.h&gt;          // is part of the IRremote library
#include &lt;IRremote.h&gt;           // http://rcl-radio.ru/wp-content/uploads/2019/06/IRremote.zip
#include &lt;DS3231.h&gt;             // http://rcl-radio.ru/wp-content/uploads/2022/10/DS3231.zip
 TDA7419 tda;
 DS3231 clock;RTCDateTime DateTime;
 LiquidCrystal_I2C lcd(0x27,20,4);  // Installing the display
 IRrecv irrecv(12); // we indicate the output of the IR receiver module
 Encoder myEnc(9, 8);// DT, CLK
 decode_results ir; 
 int in,loun,loun_f,vol_att,treb,treb_f,mid,mid_q,bass,bass_q,sub_f,faza=0,mid_f,bass_f,lon_f,rf,lf,rt,lt;
 int lon,vol,att_lf,att_rf,att_lr,att_rr,att_l,att_r,sab,treb_c,mid_c,bas_c,sab_f,middle;
 long time0,oldPosition  = -999,newPosition;
 int menu0,menu,temp0,vol_d,bass_d,treb_d,par,z_old,z1,z0,z,menu1,in_time;
 byte q,gr1,gr2,w,w2[4],www,power,in_x,mute=1;
 int hour,minut,secon,mid_d,menu2,gain0,gain1,gain2,gain3;
 byte mesto2[8]={0,10,0,10,0,10,0,10};
 byte mesto3[8]={0,0,1,1,2,2,3,3};
 byte i1,yyy;
 
void setup() {
  irrecv.enableIRIn();
  lcd.init();lcd.backlight();clock.begin();
  Serial.begin(9600);
  pinMode(10,INPUT);  // MENU SW encoder BUTTON 10
  pinMode(2,INPUT_PULLUP);   // BUTTON SET
  pinMode(3,INPUT_PULLUP);   // BUTTON IN
  pinMode(4,INPUT_PULLUP);   // BUTTON MUTE
  pinMode(5,INPUT_PULLUP);   // BUTTON STANDBY
  pinMode(7,OUTPUT);  // STANDBY CONTROL OUTPUT 7
  pinMode(6,OUTPUT);  // LIGHT CONTROL OUTPUT
  analogWrite(6, BRIG_H);// don&#039;t do more than 200
  lcd.setCursor(3,1);lcd.print(&quot;Sound Processor&quot;);lcd.setCursor(7,2);lcd.print(&quot;TDA7419&quot;); delay(2000);lcd.clear();
  ADMUX  = 0b01100000; ADCSRA = 0b11010100;
  MsTimer2::set(3, to_Timer);MsTimer2::start();
   // clock.setDateTime(__DATE__, __TIME__); // Set the clock time based on the sketch compilation time
  //if(EEPROM.read(100)!=0){for(int i=0;i&lt;101;i++){EEPROM.update(i,0);}}// Clear memory on first power-on  
  vol = EEPROM.read(0)-63;bass = EEPROM.read(1)-15;mid = EEPROM.read(2)-15;treb = EEPROM.read(3)-15;
  att_lr = EEPROM.read(4);att_rr = EEPROM.read(5);att_lf = EEPROM.read(6);att_rf = EEPROM.read(7);att_r = EEPROM.read(8);att_l = EEPROM.read(9);
  loun = EEPROM.read(10);loun_f = EEPROM.read(11);
  bass_f = EEPROM.read(12);mid_f = EEPROM.read(13);treb_f = EEPROM.read(14);sub_f = EEPROM.read(15);
  bass_q = EEPROM.read(16);mid_q = EEPROM.read(17);
  gain1 = EEPROM.read(18)-15;gain2 = EEPROM.read(19)-15;gain3 = EEPROM.read(20)-15;
  switch(in){
     case 0: gain0 = gain1;break;
     case 1: gain0 = gain2;break;
     case 2: gain0 = gain3;break;
     }
  w2_arr();audio();cl();
}
 
void to_Timer(){newPosition = myEnc.read()/4;}
 
void loop() {
  DateTime = clock.getDateTime();hour = DateTime.hour;minut = DateTime.minute;secon = DateTime.second;
  /////////////////////////////// MANAGEMENT //////////////////////////////////////////////
  if ( irrecv.decode( &amp;ir )) {Serial.print(&quot;0x&quot;);Serial.println( ir.value,HEX);irrecv.resume();time0=millis();w=1;}// IR receiver - reading, button codes are displayed in the port monitor
  if(ir.value==0){gr1=0;gr2=0;}// prohibition of pressing inactive buttons of the remote control  
 
  if(power==0){
    if(mute==1){
  if(digitalRead(10)==LOW&amp;&amp;menu0==0){menu++;delay(200);time0=millis();in_x=0;w=1;w2_arr();if(menu&gt;3){menu=0;}}// меню 0
  if(digitalRead(10)==LOW&amp;&amp;menu0==1){menu1++;delay(200);time0=millis();in_x=0;w=1;if(menu1&gt;7){menu1=0;}}// меню 1
  if(digitalRead(10)==LOW&amp;&amp;menu0==2){menu2++;delay(200);time0=millis();in_x=0;w=1;if(menu2&gt;5){menu2=0;}}// меню 2
 
  if(ir.value==IR_2&amp;&amp;menu0==0){menu++;gr1=0;gr2=0;cl1();time0=millis();in_x=0;w=1;w2_arr();if(menu&gt;3){menu=0;}}//меню 0
  if(ir.value==IR_1&amp;&amp;menu0==0){menu--;gr1=0;gr2=0;cl1();time0=millis();in_x=0;w=1;w2_arr();if(menu&lt;0){menu=3;}}//меню 0
 
  if(ir.value==IR_2&amp;&amp;menu0==1){menu1++;gr1=0;gr2=0;cl1();time0=millis();in_x=0;w=1;w2_arr();if(menu1&gt;7){menu1=0;}}//меню 1
  if(ir.value==IR_1&amp;&amp;menu0==1){menu1--;gr1=0;gr2=0;cl1();time0=millis();in_x=0;w=1;w2_arr();if(menu1&lt;0){menu1=7;}}//меню 1
 
  if(ir.value==IR_2&amp;&amp;menu0==2){menu2++;gr1=0;gr2=0;cl1();time0=millis();in_x=0;w=1;w2_arr();if(menu2&gt;5){menu2=0;}}//меню 2
  if(ir.value==IR_1&amp;&amp;menu0==2){menu2--;gr1=0;gr2=0;cl1();time0=millis();in_x=0;w=1;w2_arr();if(menu2&lt;0){menu2=5;}}//меню 2
 
  if(ir.value==IR_6||digitalRead(2)==LOW){menu0++;if(menu0&gt;2){menu0=0;}cl();in_x=0;w2_arr();time0=millis();w=1;lcd.setCursor(5,1);
     lcd.print(&quot;SETTING_&quot;);lcd.print(menu0);delay(500);lcd.clear();} 
 
  if(ir.value==IR_5||digitalRead(3)==LOW){in++;cl();time0=millis();in_x=1;w=1;www=1;menu0=100;menu=100;if(in&gt;2){in=0;}}// IN if(in&gt;5)  
    } // mute off
  if((ir.value==IR_7||digitalRead(4)==LOW)&amp;&amp;mute==1&amp;&amp;power==0){mute=0;in_x=0;mute=0;menu0=100;cl();w=1;w2_arr();lcd.setCursor(8,1);lcd.print(&quot;MUTE&quot;);audio();delay(300);}// mute on
  if((ir.value==IR_7||digitalRead(4)==LOW)&amp;&amp;mute==0&amp;&amp;power==0){mute=1;cl();time0=millis();w=1;w2_arr();menu0=0;menu=0;myEnc.write(0);audio();}// mute off
  }// power on
 
  if((ir.value==IR_8||digitalRead(5)==LOW)&amp;&amp;power==0){power=1;in_x=0;mute=0;cl();audio();lcd.setCursor(5,1);lcd.print(&quot;POWER  OFF&quot;);menu0=100;delay(3000);analogWrite(6,BRIG_L);}// power off
  if((ir.value==IR_8||digitalRead(5)==LOW)&amp;&amp;power==1){power=0;analogWrite(6, BRIG_H);cl();lcd.setCursor(5,1);lcd.print(&quot;POWER   ON &quot;);w=1;w2_arr();menu0=0;myEnc.write(0);mute=1;audio();delay(3000);cl();}// power on
 
 
if(power==0){digitalWrite(7,HIGH); //7
   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}; 
   byte a4[8] = {0b10000,0b11000,0b11100,0b11110,0b11100,0b11000,0b10000,0b00000}; //&gt;
   byte a5[8] = {0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000,0b00000};
   lcd.createChar(0,a1);lcd.createChar(1,a2);lcd.createChar(2,a3);lcd.createChar(3,a4);lcd.createChar(4,a5);
  }
  if(power==1){digitalWrite(7,LOW); //7
      byte v1[8] = {7,7,7,7,7,7,7,7};
      byte v2[8] = {7,7,0, 0, 0, 0, 0, 0};      
      byte v3[8] = { 0, 0, 0, 0, 0,0,31,31};
      byte v4[8] = {31,31, 0, 0, 0, 0,31,31};
      byte v5[8] = { 28, 28, 0, 0, 0, 0, 28, 28};
      byte v6[8] = {28,28,28,28,28,28,28,28};
      byte v7[8] = { 0, 0, 0, 0, 0, 0,7,7};
      byte v8[8] = { 31, 31,0,0,0,0,0, 0};
   byte a[6];
   byte i0,d1,d2,d3,d4,d5,d6,e1,e2,e3;
  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);
 
     a[0]=DateTime.hour/10;
     a[1]=DateTime.hour%10;
     a[2]=DateTime.minute/10;
     a[3]=DateTime.minute%10;
     a[4]=DateTime.second/10;
     a[5]=DateTime.second%10;
 
 for(int i=0;i&lt;6;i++){
      switch(i){
        case 0: e1=0,e2=1,e3=2;break;
        case 1: e1=3,e2=4,e3=5;break;
        case 2: e1=7,e2=8,e3=9;break;
        case 3: e1=10,e2=11,e3=12;break;
        case 4: e1=14,e2=15,e3=16;break;
        case 5: e1=17,e2=18,e3=19;break;
        }
      switch(a[i]){
        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);
        //lcd.setCursor(3,0);lcd.print(&quot;See You Again&quot;);
        //lcd.setCursor(5,1);lcd.print(&quot;Good Luck &quot;);              
  }
  lcd.setCursor(6,0);lcd.print(&quot;.&quot;);lcd.setCursor(13,0);lcd.print(&quot;.&quot;);lcd.setCursor(6,1);lcd.print(&quot;.&quot;);lcd.setCursor(13,1);lcd.print(&quot;.&quot;);
    //lcd.clear();
  lcd.setCursor(5,3);lcd.print(&quot;POWER  OFF&quot;);
  if(digitalRead(10)==LOW&amp;&amp;digitalRead(2)==LOW){hour++;if(hour&gt;23){hour=0;} clock.setDateTime(2022, 9, 15, hour, minut, secon);delay(100);}    // SET
  if(digitalRead(10)==LOW&amp;&amp;digitalRead(3)==LOW){minut++;if(minut&gt;59){minut=0;} clock.setDateTime(2022, 9, 15, hour, minut, secon);delay(100); }// IN
  if(digitalRead(10)==LOW&amp;&amp;digitalRead(4)==LOW){secon=0; clock.setDateTime(2022, 9, 15, hour, minut, secon);delay(100); }                      // MUTE
  } 
/////////////////////////////// MENU0 = VOLUME TERBLE BASS MIDDLE ///////////////////////////////////////////////////////////////////////
  if(menu0==0){ 
    switch(menu){
      case 0: temp0 = vol;q=0;break;
      case 1: temp0 = bass;q=1;break;
      case 2: temp0 = mid;q=2;break;
      case 3: temp0 = treb;q=3;break;
      }
 
     if(ir.value==IR_3){temp0++;gr1=1;gr2=0;cl1();time0=millis();w=1;w2[q]=1;www=1;}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){temp0++;gr2=0;cl1();time0=millis();w=1;w2[q]=1;www=1;}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){temp0--;gr1=0;gr2=1;cl1();time0=millis();w=1;w2[q]=1;www=1;}// кнопка &lt;
     if(ir.value==0xFFFFFFFF and gr2==1){temp0--;gr1=0;cl1();time0=millis();w=1;w2[q]=1;www=1;}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;   
 
   if (newPosition != oldPosition){oldPosition = newPosition;if(newPosition&gt;1){newPosition=1;}if(newPosition&lt;-1){newPosition=-1;}
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time0=millis();w=1;w2[q]=1;www=1;} 
 
 
     switch(menu){
      case 0: vol = temp0;vol_func();break;
      case 1: bass = temp0;bass_func();break;
      case 2: mid = temp0;mid_func();break;
      case 3: treb = temp0;treb_func();break;
      }
 
   au();
   for(int i=0;i&lt;4;i++){if(menu==i){lcd.setCursor(0,i);lcd.write((uint8_t)3);}else{lcd.setCursor(0,i);lcd.print(&quot; &quot;);}}
   lcd.setCursor(1,0);lcd.print(&quot;VOL(&quot;);lcd.print(in+1);lcd.print(&quot;) &quot;);if(vol&gt;=0){lcd.print(&quot; &quot;);}lcd.print(vol);lcd.print(&quot; &quot;);vol_d=map(vol,-63,0,1,24);
   lcd.setCursor(1,1);lcd.print(&quot;BASS   &quot;);if(bass&gt;=0){lcd.print(&quot; &quot;);}lcd.print(bass);lcd.print(&quot; &quot;);bass_d=map(bass,-15,15,1,24);
   lcd.setCursor(1,2);lcd.print(&quot;MIDDLE &quot;);if(mid&gt;=0){lcd.print(&quot; &quot;);}lcd.print(mid);lcd.print(&quot; &quot;);mid_d=map(mid,-15,15,1,24);
   lcd.setCursor(1,3);lcd.print(&quot;TREBLE &quot;);if(treb&gt;=0){lcd.print(&quot; &quot;);}lcd.print(treb);lcd.print(&quot; &quot;);treb_d=map(treb,-15,15,1,24);
 
 
   for(int n=0;n&lt;4;n++){if(w2[n]==1){
   switch(n){
    case 0: par = vol_d;break;
    case 1: par = bass_d;break;
    case 2: par = mid_d;break;
    case 3: par = treb_d;break; 
    } 
 
   for(z=0,z0=0,z1=0;z&lt;=par;z++,z1++){if(z1&gt;2){z1=0;z0++;}
   if(z1==1){lcd.setCursor(z0+12,n);lcd.write((uint8_t)0);lcd.setCursor(z0+1+12,n);Serial.println(z0);z_old=7-par/3;while(z_old&gt;0){z_old=z_old-1;lcd.write((uint8_t)4);}}}
   if(z1==3){lcd.setCursor(z0+12,n);lcd.write((uint8_t)1);}
   if(z1==2){lcd.setCursor(z0+12,n);lcd.write((uint8_t)2);}w2[n]=0;}
   }}// menu0 = 0
///////////////////////////////////////////////////////////////////////////////////////////////
 
///////////////////////////////////////////////////////////////////////////////////////////////
 
 if(menu0==1){
     switch(menu1){
      case 0: temp0 = att_lr;break;
      case 1: temp0 = att_rr;break;
      case 2: temp0 = att_lf;break;
      case 3: temp0 = att_rf;break;
      case 4: temp0 = att_r;break;
      case 5: temp0 = att_l;break;
      case 6: temp0 = loun;break;
      case 7: temp0 = loun_f;break;
      }
 
     if(ir.value==IR_3){temp0++;gr1=1;gr2=0;cl1();time0=millis();w=1;www=1;}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){temp0++;gr2=0;cl1();time0=millis();w=1;www=1;}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){temp0--;gr1=0;gr2=1;cl1();time0=millis();;w=1;www=1;}// кнопка &lt;
     if(ir.value==0xFFFFFFFF and gr2==1){temp0--;gr1=0;cl1();time0=millis();w=1;www=1;}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;     
 
   if (newPosition != oldPosition){oldPosition = newPosition;if(newPosition&gt;1){newPosition=1;}if(newPosition&lt;-1){newPosition=-1;}
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time0=millis();w=1;www=1;} 
 
     switch(menu1){
      case 0: att_lr = temp0;att_lr_func();break;
      case 1: att_rr = temp0;att_rr_func();break;
      case 2: att_lf = temp0;att_lf_func();break;
      case 3: att_rf = temp0;att_rf_func();break;      
      case 4: att_r  = temp0;att_r_func();break;
      case 5: att_l  = temp0;att_l_func();break;
      case 6: loun  = temp0;loun_func();break;
      case 7: loun_f  = temp0;loun_f_func();break;
      }
 
  au();
  for(int i=0;i&lt;8;i++){if(menu1==i){lcd.setCursor(mesto2[i],mesto3[i]);lcd.write((uint8_t)3);}else{lcd.setCursor(mesto2[i],mesto3[i]);lcd.print(&quot; &quot;);}}
 
  lcd.setCursor(1,0);lcd.print(&quot;AT_LR &quot;);lcd.print(att_lr);lcd.print(&quot; &quot;);lcd.setCursor(11,0);lcd.print(&quot;AT_RR &quot;);lcd.print(att_rr);lcd.print(&quot; &quot;);
  lcd.setCursor(1,1);lcd.print(&quot;AT_LF &quot;);lcd.print(att_lf);lcd.print(&quot; &quot;);lcd.setCursor(11,1);lcd.print(&quot;AT_RF &quot;);lcd.print(att_rf);lcd.print(&quot; &quot;);
  lcd.setCursor(1,2);lcd.print(&quot;AT_SR &quot;);lcd.print(att_r);lcd.print(&quot; &quot;);lcd.setCursor(11,2);lcd.print(&quot;AT_SL &quot;);lcd.print(att_l);lcd.print(&quot; &quot;);
  lcd.setCursor(1,3);lcd.print(&quot;LOUND &quot;);lcd.print(abs(loun));lcd.print(&quot; &quot;);lcd.setCursor(11,3);
  switch(loun_f){
    case 0: lcd.print(&quot;FLAT   &quot;);break;
    case 1: lcd.print(&quot;400  Hz&quot;);break;
    case 2: lcd.print(&quot;800  Hz&quot;);break;
    case 3: lcd.print(&quot;2.4 kHz&quot;);break;}
 
 } // menu0 = 1
 
 
///////////////////////////////////////////////////////////////////////////////////////////////
 
 if(menu0==2){
     switch(menu2){
      case 0: temp0 = bass_f;break;
      case 1: temp0 = mid_f;break;
      case 2: temp0 = treb_f;break;
      case 3: temp0 = sub_f;break;
      case 4: temp0 = bass_q;break;
      case 5: temp0 = mid_q;break;
      }
 
     if(ir.value==IR_3){temp0++;gr1=1;gr2=0;cl1();time0=millis();w=1;www=1;}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){temp0++;gr2=0;cl1();time0=millis();w=1;www=1;}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){temp0--;gr1=0;gr2=1;cl1();time0=millis();;w=1;www=1;}// кнопка &lt;
     if(ir.value==0xFFFFFFFF and gr2==1){temp0--;gr1=0;cl1();time0=millis();w=1;www=1;}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;     
 
   if (newPosition != oldPosition){oldPosition = newPosition;if(newPosition&gt;1){newPosition=1;}if(newPosition&lt;-1){newPosition=-1;}
     temp0=temp0+newPosition;myEnc.write(0);newPosition=0;time0=millis();w=1;www=1;} 
 
     switch(menu2){
      case 0: bass_f = temp0;bass_f_func();break;
      case 1: mid_f = temp0;mid_f_func();break;
      case 2: treb_f = temp0;treb_f_func();break;
      case 3: sub_f = temp0;sub_f_func();break;      
      case 4: bass_q  = temp0;bass_q_func();break;
      case 5: mid_q  = temp0;mid_q_func();break;
      }
 
  au();
  for(int i=0;i&lt;6;i++){if(menu2==i){lcd.setCursor(mesto2[i],mesto3[i]);lcd.write((uint8_t)3);}else{lcd.setCursor(mesto2[i],mesto3[i]);lcd.print(&quot; &quot;);}}
 
  lcd.setCursor(1,0);lcd.print(&quot;BF &quot;);
    switch(bass_f){
    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;}
  lcd.setCursor(11,0);lcd.print(&quot;MF &quot;);
    switch(mid_f){
      case 0: lcd.print(&quot;0.5kHz&quot;);break;
      case 1: lcd.print(&quot;1.0kHz&quot;);break;
      case 2: lcd.print(&quot;1.5kHz&quot;);break;
      case 3: lcd.print(&quot;2.5kHz&quot;);break;}
 
  lcd.setCursor(1,1);lcd.print(&quot;TF&quot;);
    switch(treb_f){
      case 0: lcd.print(&quot;10.0kHz&quot;);break;
      case 1: lcd.print(&quot;12.5kHz&quot;);break;
      case 2: lcd.print(&quot;15.0kHz&quot;);break;
      case 3: lcd.print(&quot;17.5kHz&quot;);break;}
 
  lcd.setCursor(11,1);lcd.print(&quot;SF &quot;);
    switch(sub_f){
      case 0: lcd.print(&quot;FLAT  &quot;);break;
      case 1: lcd.print(&quot;400 Hz&quot;);break;
      case 2: lcd.print(&quot;800 Hz&quot;);break;
      case 3: lcd.print(&quot;2.4kHz&quot;);break;}
 
  lcd.setCursor(1,2);lcd.print(&quot;BQ &quot;);
    switch(bass_q){
      case 0: lcd.print(&quot;1.0 &quot;);break;
      case 1: lcd.print(&quot;1.25&quot;);break;
      case 2: lcd.print(&quot;1.5 &quot;);break;
      case 3: lcd.print(&quot;2.0 &quot;);break;}
 
  lcd.setCursor(11,2);lcd.print(&quot;MQ &quot;);
    switch(mid_q){
      case 0: lcd.print(&quot;0.5 &quot;);break;
      case 1: lcd.print(&quot;0.75&quot;);break;
      case 2: lcd.print(&quot;1.0 &quot;);break;
      case 3: lcd.print(&quot;1.25&quot;);break;}
 
 } // menu0 = 2 
 
 
////////////////////////// GAIN IN /////////////////////////////////////////////////////////////////////////////////////
if(in_x==1){ menu0=100;
   switch(in){
     case 0: gain0 = gain1;break;
     case 1: gain0 = gain2;break;
     case 2: gain0 = gain3;break;
     }
 
     if(ir.value==IR_3){gain0++;gr1=1;gr2=0;cl1();time0=millis();www=1;w=1;gain_func();}// кнопка &gt; 
     if(ir.value==0xFFFFFFFF and gr1==1){gain0++;gr2=0;cl1();time0=millis();www=1;w=1;gain_func();}// кнопка &gt;&gt;&gt;&gt;&gt;&gt;
     if(ir.value==IR_4){gain0--;gr1=0;gr2=1;cl1();time0=millis();www=1;w=1;gain_func();}// кнопка &lt;
     if(ir.value==0xFFFFFFFF and gr2==1){gain0--;gr1=0;cl1();time0=millis();www=1;w=1;gain_func();}// кнопка &lt;&lt;&lt;&lt;&lt;&lt;  
 
    if (newPosition != oldPosition) {oldPosition = newPosition;if(newPosition&gt;1){newPosition=1;}if(newPosition&lt;-1){newPosition=-1;}
    gain0=gain0+newPosition;myEnc.write(0);newPosition=0;time0=millis();www=1;w=1;gain_func();} 
 
   switch(in){
     case 0: gain1 = gain0;break;
     case 1: gain2 = gain0;break;
     case 2: gain3 = gain0;break;
     }
 
  au();
  lcd.setCursor(7,1);lcd.print(&quot;INPUT &quot;);lcd.print(in+1);lcd.setCursor(5,2);lcd.print(&quot;GAIN &quot;);lcd.print(gain0);lcd.print(&quot; &quot;);lcd.setCursor(14,2);lcd.print(&quot;dB &quot;);
   }
 
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(in_x==1){in_time=3000;}else{in_time=10000;}
if(millis()-time0&gt;in_time&amp;&amp;w==1&amp;&amp;mute==1&amp;&amp;power==0){if(menu0==1){cl();}w=0;if(menu0!=0){cl();}menu0=0;menu=0;in_x=0;w2_arr();
   EEPROM.update(0,vol+63);EEPROM.update(1,bass+15);EEPROM.update(2,mid+15);EEPROM.update(3,treb+15);
   EEPROM.update(4,att_lr);EEPROM.update(5,att_rr);EEPROM.update(6,att_lf);EEPROM.update(7,att_rf);EEPROM.update(8,att_r);EEPROM.update(9,att_l);
   EEPROM.update(10,loun);EEPROM.update(11,loun_f);
   EEPROM.update(12,bass_f);EEPROM.update(13,mid_f);EEPROM.update(14,treb_f);EEPROM.update(15,sub_f);
   EEPROM.update(16,bass_q);EEPROM.update(17,mid_q);
   EEPROM.update(18,gain1+15);EEPROM.update(19,gain2+15);EEPROM.update(20,gain3+15);
   }
}
 
void gain_func(){if(gain0&lt;-15){gain0=-15;}if(gain0&gt;15){gain0=15;}}
void w2_arr(){w2[0]=1;w2[1]=1;w2[2]=1;w2[3]=1;}
void loun_f_func(){if(loun_f&gt;3){loun_f=3;}if(loun_f&lt;0){loun_f=0;}}
void loun_func(){if(loun&lt;0){loun=0;}if(loun&gt;15){loun=15;}}
void att_lr_func(){if(att_lr&gt;16){att_lr=16;}if(att_lr&lt;0){att_lr=0;}}
void att_rr_func(){if(att_rr&gt;16){att_rr=16;}if(att_rr&lt;0){att_rr=0;}}
void att_lf_func(){if(att_lf&gt;16){att_lf=16;}if(att_lf&lt;0){att_lf=0;}}
void att_rf_func(){if(att_rf&gt;16){att_rf=16;}if(att_rf&lt;0){att_rf=0;}}
void att_r_func(){if(att_r&gt;16){att_r=16;}if(att_r&lt;0){att_r=0;}}
void att_l_func(){if(att_r&gt;16){att_r=16;}if(att_r&lt;0){att_r=0;}}
void vol_func(){if(vol&lt;-63){vol=-63;}if(vol&gt;0){vol=0;}}
void treb_func(){if(treb&lt;-15){treb=-15;}if(treb&gt;15){treb=15;}}
void bass_func(){if(bass&lt;-15){bass=-15;}if(bass&gt;15){bass=15;}}
void mid_func(){if(mid&lt;-15){mid=-15;}if(mid&gt;15){mid=15;}}
void cl(){ir.value=0;delay(300);lcd.clear();}
void cl1(){ir.value=0;delay(200);}  
void au(){if(www==1){audio();www=0;}}
void bass_f_func(){if(bass_f&gt;3){bass_f=3;}if(bass_f&lt;0){bass_f=0;}}
void mid_f_func(){if(mid_f&gt;3){mid_f=3;}if(mid_f&lt;0){mid_f=0;}}
void treb_f_func(){if(treb_f&gt;3){treb_f=3;}if(treb_f&lt;0){treb_f=0;}}
void sub_f_func(){if(sub_f&gt;3){sub_f=3;}if(sub_f&lt;0){sub_f=0;}}
void bass_q_func(){if(bass_q&gt;3){bass_q=3;}if(bass_q&lt;0){bass_q=0;}}
void mid_q_func(){if(mid_q&gt;3){mid_q=3;}if(mid_q&lt;0){mid_q=0;}}
 
void audio(){
tda.setInput(in,gain0,0);    //вх1=1, вх2=2, вх3=3
tda.setInput2(0,0,0);   // не используется
tda.setAtt_loudness(lon,lon_f,0,0);
tda.setSoft(mute,0,0,0,0);//mute off (не менять)
tda.setVolume(vol-79,0);   // общая громкость от 0 до 79 макс
tda.setAtt_LF(64+lf,0);   // гром. лк фронт
tda.setAtt_RF(64+rf,0);   // гром. пк фронт
tda.setAtt_LT(64+lt,0);   // гром. лк тыл
tda.setAtt_RT(64+rt,0);   // гром. пк тыл
tda.setAtt_SUB(64+sab,0);  // гром. савбуфер
tda.setAtt_Mix(79,0);   // не использует
tda.setFilter_Treble(treb,treb_c,0); 
tda.setFilter_Middle(middle,0,0);
tda.setFilter_Bass(bass,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);

// tda7719
//tda.setInput(in,1,1,2); // 0...7, 0...1, 0...1, 0...7
//tda.setInput_2(0,0,1,1,1,1); // 0...7, 0...1, 0...1, 0...1, 0...1, 0...1 
//tda.setMix_source(7,0); // 0...7, 0...-31
//tda.setMix_cont(1,1,1,1,1,1,1,1); // all 0...1
//tda.setMute(mute,0,0,1,0,1,1); // 0...1, 0...1, 0...3, 0...1, 0...1, 0...1, 0...1 mute off = 1
//tda.setSoft_1(1,1,1,1,1,1,1,1); //all 0...1
//tda.setSoft_2(1,1,1,1,0,3); // 0...1, 0...1, 0...1, 0...1, 0...2, 0...3
//tda.setLoudness(-loun,loun_f,1,1); // 0...-15, 0...3, 0...1, 0...1 
//tda.setVol(gain0,1,1); // -15...+15, 0...1, 0...1
//tda.setTreble(treb,treb_f,1); // -15...+15, 0...3, 0...1
//tda.setMiddle(mid,mid_q,1); // -15...+15, 0...3, 0...1
//tda.setBass(bass,bass_q,1); // -15...+15, 0...3, 0...1
//tda.setSMB(sub_f,faza,mid_f,bass_f,1); // 0...3, 0...1, 0...3, 0...3, 0...1
//tda.setVol_LF(vol-att_lf,1); // 0...-79, 0...1 lov=63+16 att
//tda.setVol_RF(vol-att_rf,1); // 0...-79, 0...1
//tda.setVol_LR(vol-att_lr,1); // 0...-79, 0...1
//tda.setVol_RR(vol-att_rr,1); // 0...-79, 0...1
//tda.setVol_SUB_L(vol-att_l,1); // 0...-79, 0...1
//tda.setVol_SUB_R(vol-att_r,1); // 0...-79, 0...1
//tda.setTest1(0,14,1,1); // 0...1, 0...15, 0...1, 0...1
//tda.setTest2(0,1,1,3); // 0...1, 0...1, 0...1, 0...3
}</code></pre></div><p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/03/2d8efa999e55ffdd681ebc21bda83103.jpg" alt="http://forum.rcl-radio.ru/uploads/images/2025/03/2d8efa999e55ffdd681ebc21bda83103.jpg" /></span> <br /><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/03/86e53aa2d8d0cced2794ffbe94ff33e1.jpg" alt="http://forum.rcl-radio.ru/uploads/images/2025/03/86e53aa2d8d0cced2794ffbe94ff33e1.jpg" /></span></p>]]></description>
			<author><![CDATA[null@example.com (pued1970)]]></author>
			<pubDate>Tue, 11 Mar 2025 07:34:25 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11460#p11460</guid>
		</item>
		<item>
			<title><![CDATA[Re: TDA7419 + энкодер + ИК пульт + анализатор спектра]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11453#p11453</link>
			<description><![CDATA[<p>Попробуйте поменять код на ST7789</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Fri, 07 Mar 2025 11:18:02 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11453#p11453</guid>
		</item>
		<item>
			<title><![CDATA[Re: TDA7419 + энкодер + ИК пульт + анализатор спектра]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11452#p11452</link>
			<description><![CDATA[<p>I have tested it many times until I got the code below. But I don&#039;t know if it can be used with the TDA7419 program.</p><div class="codebox"><pre><code>#include &lt;Adafruit_GFX.h&gt;    // Core graphics library
#include &lt;Adafruit_ST7789.h&gt; // Hardware-specific library for ST7789
#include &lt;SPI.h&gt;

#if defined(ARDUINO_FEATHER_ESP32) // Feather Huzzah32
  #define TFT_CS         14
  #define TFT_RST        15
  #define TFT_DC         32

#elif defined(ESP8266)
  #define TFT_CS         4
  #define TFT_RST        16
  #define TFT_DC         5

#else
  // For the breakout board, you can use any 2 or 3 pins.
  // These pins will also work for the 1.8&quot; TFT shield.
  #define TFT_CS        10  // 10
  #define TFT_RST       9 // Or set to -1 and connect to Arduino RESET pin 9
  #define TFT_DC        8  // 8
#endif

// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique
// to each board and not reassignable. For Arduino Uno: MOSI = pin 11 and
// SCLK = pin 13. This is the fastest mode of operation and is required if
// using the breakout board&#039;s microSD card.

//Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

// OPTION 2 lets you interface the display using ANY TWO or THREE PINS,
// tradeoff being that performance is not as fast as hardware SPI above.
#define TFT_MOSI 11  // Data out 11
#define TFT_SCLK 13  // Clock out 13

Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);


float p = 3.1415926;

void setup(void) {
  Serial.begin(9600);
  Serial.print(F(&quot;Hello! ST77xx TFT Test&quot;));

  // Use this initializer (uncomment) if using a 1.3&quot; or 1.54&quot; 240x240 TFT:
  //tft.init(240, 240);           // Init ST7789 240x240

  // OR use this initializer (uncomment) if using a 1.69&quot; 280x240 TFT:
  //tft.init(240, 280);           // Init ST7789 280x240

  // OR use this initializer (uncomment) if using a 2.0&quot; 320x240 TFT:
  tft.init(240, 320);           // Init ST7789 320x240

  // OR use this initializer (uncomment) if using a 1.14&quot; 240x135 TFT:
  //tft.init(135, 240);           // Init ST7789 240x135
  
  // OR use this initializer (uncomment) if using a 1.47&quot; 172x320 TFT:
  //tft.init(172, 320);           // Init ST7789 172x320

  // OR use this initializer (uncomment) if using a 1.9&quot; 170x320 TFT:
  //tft.init(170, 320);           // Init ST7789 170x320

  // SPI speed defaults to SPI_DEFAULT_FREQ defined in the library, you can override it here
  // Note that speed allowable depends on chip and quality of wiring, if you go too fast, you
  // may end up with a black screen some times, or all the time.
  //tft.setSPISpeed(4000); // 40000000
  Serial.println(F(&quot;Initialized&quot;));

  uint16_t time = millis();
  tft.fillScreen(ST77XX_BLACK);
  time = millis() - time;

  Serial.println(time, DEC);
  delay(500);

  // large block of text
  tft.fillScreen(ST77XX_BLACK);
  testdrawtext(&quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. &quot;, ST77XX_WHITE);
  delay(1000);

  // tft print function!
  tftPrintTest();
  delay(1000);

  // a single pixel
  tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN);
  delay(500);

  // line draw test
  testlines(ST77XX_YELLOW);
  delay(500);

  // optimized lines
  testfastlines(ST77XX_RED, ST77XX_BLUE);
  delay(500);

  testdrawrects(ST77XX_GREEN);
  delay(500);

  testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA);
  delay(500);

  tft.fillScreen(ST77XX_BLACK);
  testfillcircles(10, ST77XX_BLUE);
  testdrawcircles(10, ST77XX_WHITE);
  delay(500);

  testroundrects();
  delay(500);

  testtriangles();
  delay(500);

  mediabuttons();
  delay(500);

  Serial.println(&quot;done&quot;);
  delay(1000);
}

void loop() {
  tft.invertDisplay(true);
  delay(500);
  tft.invertDisplay(false);
  delay(500);
}

void testlines(uint16_t color) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x &lt; tft.width(); x+=6) {
    tft.drawLine(0, 0, x, tft.height()-1, color);
    delay(0);
  }
  for (int16_t y=0; y &lt; tft.height(); y+=6) {
    tft.drawLine(0, 0, tft.width()-1, y, color);
    delay(0);
  }

  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x &lt; tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
    delay(0);
  }
  for (int16_t y=0; y &lt; tft.height(); y+=6) {
    tft.drawLine(tft.width()-1, 0, 0, y, color);
    delay(0);
  }

  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x &lt; tft.width(); x+=6) {
    tft.drawLine(0, tft.height()-1, x, 0, color);
    delay(0);
  }
  for (int16_t y=0; y &lt; tft.height(); y+=6) {
    tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
    delay(0);
  }

  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x &lt; tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
    delay(0);
  }
  for (int16_t y=0; y &lt; tft.height(); y+=6) {
    tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
    delay(0);
  }
}

void testdrawtext(char *text, uint16_t color) {
  tft.setCursor(0, 0);
  tft.setTextColor(color);
  tft.setTextWrap(true);
  tft.print(text);
}

void testfastlines(uint16_t color1, uint16_t color2) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t y=0; y &lt; tft.height(); y+=5) {
    tft.drawFastHLine(0, y, tft.width(), color1);
  }
  for (int16_t x=0; x &lt; tft.width(); x+=5) {
    tft.drawFastVLine(x, 0, tft.height(), color2);
  }
}

void testdrawrects(uint16_t color) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=0; x &lt; tft.width(); x+=6) {
    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
  }
}

void testfillrects(uint16_t color1, uint16_t color2) {
  tft.fillScreen(ST77XX_BLACK);
  for (int16_t x=tft.width()-1; x &gt; 6; x-=6) {
    tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
  }
}

void testfillcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=radius; x &lt; tft.width(); x+=radius*2) {
    for (int16_t y=radius; y &lt; tft.height(); y+=radius*2) {
      tft.fillCircle(x, y, radius, color);
    }
  }
}

void testdrawcircles(uint8_t radius, uint16_t color) {
  for (int16_t x=0; x &lt; tft.width()+radius; x+=radius*2) {
    for (int16_t y=0; y &lt; tft.height()+radius; y+=radius*2) {
      tft.drawCircle(x, y, radius, color);
    }
  }
}

void testtriangles() {
  tft.fillScreen(ST77XX_BLACK);
  uint16_t color = 0xF800;
  int t;
  int w = tft.width()/2;
  int x = tft.height()-1;
  int y = 0;
  int z = tft.width();
  for(t = 0 ; t &lt;= 15; t++) {
    tft.drawTriangle(w, y, y, x, z, x, color);
    x-=4;
    y+=4;
    z-=4;
    color+=100;
  }
}

void testroundrects() {
  tft.fillScreen(ST77XX_BLACK);
  uint16_t color = 100;
  int i;
  int t;
  for(t = 0 ; t &lt;= 4; t+=1) {
    int x = 0;
    int y = 0;
    int w = tft.width()-2;
    int h = tft.height()-2;
    for(i = 0 ; i &lt;= 16; i+=1) {
      tft.drawRoundRect(x, y, w, h, 5, color);
      x+=2;
      y+=3;
      w-=4;
      h-=6;
      color+=1100;
    }
    color+=100;
  }
}

void tftPrintTest() {
  tft.setTextWrap(false);
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(0, 30);
  tft.setTextColor(ST77XX_RED);
  tft.setTextSize(1);
  tft.println(&quot;Hello World!&quot;);
  tft.setTextColor(ST77XX_YELLOW);
  tft.setTextSize(2);
  tft.println(&quot;Hello World!&quot;);
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextSize(3);
  tft.println(&quot;Hello World!&quot;);
  tft.setTextColor(ST77XX_BLUE);
  tft.setTextSize(4);
  tft.print(1234.567);
  delay(1500);
  tft.setCursor(0, 0);
  tft.fillScreen(ST77XX_BLACK);
  tft.setTextColor(ST77XX_WHITE);
  tft.setTextSize(0);
  tft.println(&quot;Hello World!&quot;);
  tft.setTextSize(1);
  tft.setTextColor(ST77XX_GREEN);
  tft.print(p, 6);
  tft.println(&quot; Want pi?&quot;);
  tft.println(&quot; &quot;);
  tft.print(8675309, HEX); // print 8,675,309 out in HEX!
  tft.println(&quot; Print HEX!&quot;);
  tft.println(&quot; &quot;);
  tft.setTextColor(ST77XX_WHITE);
  tft.println(&quot;Sketch has been&quot;);
  tft.println(&quot;running for: &quot;);
  tft.setTextColor(ST77XX_MAGENTA);
  tft.print(millis() / 1000);
  tft.setTextColor(ST77XX_WHITE);
  tft.print(&quot; seconds.&quot;);
}

void mediabuttons() {
  // play
  tft.fillScreen(ST77XX_BLACK);
  tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE);
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED);
  delay(1000);
  // pause
  tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE);
  tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN);
  tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN);
  delay(1000);
  // play color
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE);
  delay(100);
  // pause color
  tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED);
  tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED);
  // play color
  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN);
}</code></pre></div><p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2025/03/9de059678e3d39284e954bc433bf69cf.jpg" alt="http://forum.rcl-radio.ru/uploads/images/2025/03/9de059678e3d39284e954bc433bf69cf.jpg" /></span></p>]]></description>
			<author><![CDATA[null@example.com (pued1970)]]></author>
			<pubDate>Fri, 07 Mar 2025 08:54:40 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11452#p11452</guid>
		</item>
		<item>
			<title><![CDATA[Re: TDA7419 + энкодер + ИК пульт + анализатор спектра]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11451#p11451</link>
			<description><![CDATA[<p>I have tested as you suggested. Still the same. No screenshot.<br />I use this code to test.</p><div class="codebox"><pre><code>// библиотека для работы с дисплеем
#include &lt;UTFT.h&gt;
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера пинов
// к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS
UTFT myGLCD(TFT01_22SP, 9, 8, 10, 11, 12);
// объявления встроенного шрифта
extern uint8_t BigFont[];
void setup()
{
  // инициализируем дисплей с вертикальной ориентацией
  myGLCD.InitLCD(0);
  // очищаем экран
  myGLCD.clrScr();
  // выбираем большой шрифт
  myGLCD.setFont(BigFont);
  // устанавливаем красный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_RED);
  // печатаем строку в указанной строке позиции
  myGLCD.print(&quot;Hello, World!&quot;, CENTER, 0);
  // устанавливаем синий цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_BLUE);
  // печатаем строку в указанной строке позиции
  myGLCD.print(&quot;Hello, World!&quot;, CENTER, 36);
  // устанавливаем зелёный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_GREEN);
  // печатаем строку в указанной строке позиции
  myGLCD.print(&quot;Hello, World!&quot;, CENTER, 72);
  // устанавливаем серебряный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_SILVER);
  // печатаем строку в указанной строке позиции
  myGLCD.print(&quot;Hello, World!&quot;, CENTER, 108);
}
void loop()
{
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (pued1970)]]></author>
			<pubDate>Fri, 07 Mar 2025 01:21:51 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11451#p11451</guid>
		</item>
		<item>
			<title><![CDATA[Re: TDA7419 + энкодер + ИК пульт + анализатор спектра]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11450#p11450</link>
			<description><![CDATA[<p>Проверьте соответствие </p><p>8, 9, 12, 11, 10 === SDI (MOSI), SCK, CS, RESET, DC</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Fri, 07 Mar 2025 00:10:10 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11450#p11450</guid>
		</item>
		<item>
			<title><![CDATA[Re: TDA7419 + энкодер + ИК пульт + анализатор спектра]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11449#p11449</link>
			<description><![CDATA[<p>I found the code from the web and tested it but it doesn&#039;t work.</p><div class="codebox"><pre><code>// библиотека для работы с дисплеем
#include &lt;UTFT.h&gt;
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера пинов
// к которым подключаются линии SCK, SDI (MOSI), D/C, RESET, CS
UTFT myGLCD(TFT01_22SP, 9, 8, 12, 11, 10);
// объявления встроенного шрифта
extern uint8_t BigFont[];
void setup()
{
  // инициализируем дисплей с вертикальной ориентацией
  myGLCD.InitLCD(0);
  // очищаем экран
  myGLCD.clrScr();
  // выбираем большой шрифт
  myGLCD.setFont(BigFont);
  // устанавливаем красный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_RED);
  // печатаем строку в указанной строке позиции
  myGLCD.print(&quot;Hello, World!&quot;, CENTER, 0);
  // устанавливаем синий цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_BLUE);
  // печатаем строку в указанной строке позиции
  myGLCD.print(&quot;Hello, World!&quot;, CENTER, 36);
  // устанавливаем зелёный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_GREEN);
  // печатаем строку в указанной строке позиции
  myGLCD.print(&quot;Hello, World!&quot;, CENTER, 72);
  // устанавливаем серебряный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_SILVER);
  // печатаем строку в указанной строке позиции
  myGLCD.print(&quot;Hello, World!&quot;, CENTER, 108);
}
void loop()
{
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (pued1970)]]></author>
			<pubDate>Thu, 06 Mar 2025 17:51:39 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11449#p11449</guid>
		</item>
		<item>
			<title><![CDATA[Re: TDA7419 + энкодер + ИК пульт + анализатор спектра]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11448#p11448</link>
			<description><![CDATA[<p>Скачайте библиотеку с этого источника - <a href="http://rcl-radio.ru/wp-content/uploads/2019/06/UTFT.zip">http://rcl-radio.ru/wp-content/uploads/2019/06/UTFT.zip</a></p><div class="codebox"><pre><code>// библиотека для работы с дисплеем
#include &lt;UTFT.h&gt;
// создаём объект класса UTFT
// и передаём идентификатор модели дисплея и номера пинов
UTFT myGLCD(TFT01_22SP, 8, 9, 12, 11, 10); // SDI (MOSI), SCK, CS, RESET, DC
// объявления встроенного шрифта
extern uint8_t BigFont[];
void setup()
{
  // инициализируем дисплей с вертикальной ориентацией
  myGLCD.InitLCD(0);
  // очищаем экран
  myGLCD.clrScr();
  // выбираем большой шрифт
  myGLCD.setFont(BigFont);
  // устанавливаем красный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_RED);
  // печатаем строку в указанной строке позиции
  myGLCD.print(&quot;Hello, World!&quot;, CENTER, 0);
  // устанавливаем синий цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_BLUE);
  // печатаем строку в указанной строке позиции
  myGLCD.print(&quot;Hello, World!&quot;, CENTER, 36);
  // устанавливаем зелёный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_GREEN);
  // печатаем строку в указанной строке позиции
  myGLCD.print(&quot;Hello, World!&quot;, CENTER, 72);
  // устанавливаем серебряный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_SILVER);
  // печатаем строку в указанной строке позиции
  myGLCD.print(&quot;Hello, World!&quot;, CENTER, 108);
}
void loop()
{
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Thu, 06 Mar 2025 17:51:17 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11448#p11448</guid>
		</item>
	</channel>
</rss>
