<?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; ESP32-C3 TDA7719 TFT9341]]></title>
		<link>http://forum.rcl-radio.ru/viewtopic.php?id=704</link>
		<atom:link href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=704&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «ESP32-C3 TDA7719 TFT9341».]]></description>
		<lastBuildDate>Mon, 18 Aug 2025 03:23:23 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: ESP32-C3 TDA7719 TFT9341]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11885#p11885</link>
			<description><![CDATA[<p>Hello everyone.<br />After some free time, I modified the program and the result is a screen image and color adjustments.<br />However, the encoder control isn&#039;t working. However, pressing the switch button seems to work. Turning left and right doesn&#039;t work. I&#039;m not sure where to connect. Please advise.<br />As shown in the circuit diagram, I&#039;m using an ESPC32C3 + ILI9341.<br />Regards.</p><div class="codebox"><pre><code>#include &lt;TFT_eSPI.h&gt; // Hardware-specific library
#include &lt;SPI.h&gt;
#include &lt;TDA7719.h&gt;
#include &lt;Encoder.h&gt;
#include &lt;EEPROM.h&gt;
//#include &lt;MsTimer2.h&gt;
#include &lt;ezButton.h&gt;  // the library to use for SW pin
//#include &lt;Servo.h&gt;
#include &quot;Free_Fonts.h&quot;

//#define TFT_MOSI  PIN_D7  // 20
//#define TFT_SCLK  PIN_D8  // 8
//#define TFT_CS    PIN_D6  // 21 Chip select control
//#define TFT_DC    PIN_D2  // 4 Data Command control pin
//#define TFT_RST   PIN_D3  // 5
#define SDA GPIO8  // D4
#define SCL GPIO9  // D5

TDA7719 tda;
TFT_eSPI tft = TFT_eSPI();       // Invoke custom library
Encoder myEnc(10, 1);//CLK, DT encoder connection

int k=1,i,q=1,y=1,w1=1,w2=1,w3=1,w4=1,w5=1,w6=1,w7=1,w8=1,w9=1,w10=1,w11=1,w12=1,w13=1,w14=1,w15=1,w16=1,w17=1,w18=1,w19=1,w20=1,w21=1;
int v0=1,v1=1,v2=1,v3=1,v4=1,v5=1,v6=1,v7=1,v8=1,v9=1,v10=1,v11=1,v12=1,v13=1,v14=1,v15=1,v16=1,v17=1,v18=1,v19=1,v20=1;
int w=1,ccc,xxx=1,menu=0,menu_old,vol,in,in0,loun,loun_f,vol_att,treb,treb_f,mid,mid_q,bass,bass_q,sub_f,phase,mid_f,bass_f,att_lf,att_rf,att_lr,att_rr,att_l,att_r,vol0,vol1,vol2,vol3,vol4,vol5;
unsigned long newPosition,oldPosition  = -999,newPosition1,oldPosition1  = -999;

//byte power;
//long time0,times1;

// Rotary Encoder Inputs
#define CLK_PIN 10  // ESP32 pin GPIO10 connected to the rotary encoder&#039;s CLK pin
#define DT_PIN 1   // ESP32 pin GPIO1 connected to the rotary encoder&#039;s DT pin
#define SW_PIN 0   // ESP32 pin GPIO0 connected to the rotary encoder&#039;s SW pin

#define DIRECTION_CW 0   // clockwise direction
#define DIRECTION_CCW 1  // counter-clockwise direction

volatile int counter = 0;
volatile int direction = DIRECTION_CW;
volatile unsigned long last_time;  // for debouncing
int prev_counter;
//int direction = DIRECTION_CW;
int CLK_state;
int prev_CLK_state;

ezButton button(SW_PIN);  // create ezButton object that attach to pin 7;

void IRAM_ATTR ISR_encoder() {
  if ((millis() - last_time) &lt; 50)  // debounce time is 50ms
    return;

  if (digitalRead(DT_PIN) == HIGH) {
    // the encoder is rotating in counter-clockwise direction =&gt; decrease the counter
    counter--;
    direction = DIRECTION_CCW;
  } else {
    // the encoder is rotating in clockwise direction =&gt; increase the counter
    counter++;
    direction = DIRECTION_CW;
  }

  last_time = millis();
}

void setup(void) {
   Serial.begin(9600);
  
  // configure encoder pins as inputs
   pinMode (CLK_PIN,INPUT);
   pinMode (DT_PIN,INPUT);
   //pinMode (SW, INPUT);

   // read the initial state of the rotary encoder&#039;s CLK pin
  prev_CLK_state = digitalRead(CLK_PIN);

   button.setDebounceTime(100);  // set debounce time to 50 milliseconds

   // use interrupt for CLK pin is enough
  // call ISR_encoder() when CLK pin changes from LOW to HIGH
  attachInterrupt(digitalPinToInterrupt(CLK_PIN), ISR_encoder, RISING);

   vol = EEPROM.read(0)-79;treb = EEPROM.read(1)-15;treb_f = EEPROM.read(2);mid = EEPROM.read(3)-15;mid_f = EEPROM.read(4);bass = EEPROM.read(5)-15;bass_f = EEPROM.read(6);
   loun = EEPROM.read(7)-15;loun_f = EEPROM.read(8);att_lf=EEPROM.read(9)-30;att_rf=EEPROM.read(10)-30;att_lr=EEPROM.read(11)-30;att_rr=EEPROM.read(12)-30;
   att_l=EEPROM.read(13)-30;att_r=EEPROM.read(14)-30;sub_f=EEPROM.read(15);phase=EEPROM.read(16);bass_q=EEPROM.read(17);mid_q=EEPROM.read(18);
   in0=EEPROM.read(19);vol0=EEPROM.read(20)-15;vol1=EEPROM.read(21)-15;vol2=EEPROM.read(22)-15;vol3=EEPROM.read(23)-15;vol4=EEPROM.read(24)-15;inn();vol5=EEPROM.read(25)-15;inn();
   delay(300);audio();// we transfer all settings from memory to tda

  tft.begin();
  //tft.init();
  tft.fillScreen(TFT_BLACK);
  tft.setRotation(1);
  for(int i=0; i&lt;2; i++){                                                
    tft.drawRect(0+i,0+i,319-i*2,239-i*2,TFT_PURPLE);}      //draw the outer border (0+i,0+i,319-i*2,239-i*2)
    tft.drawRoundRect(10,10,299,219,8,TFT_OLIVE);             //draw an inner border with rounded corners

  //tft.fillScreen(TFT_BLACK);
  tft.setFreeFont(FSB12);
  //tft.setTextSize(3);
  tft.setTextColor(TFT_SKYBLUE);
  tft.setCursor(35, 80);
  tft.print(&quot;AUDIO PROCEESOR&quot;);
  tft.setTextColor(TFT_GREEN);
  tft.setCursor(60, 120);
  tft.print(&quot;TONE CONTROL&quot;);
  tft.setTextColor(TFT_VIOLET);
  tft.setCursor(120, 160);
  tft.print(&quot;HI-END&quot;);
  delay(5000);
  tft.fillScreen(0x10cb);

}
//void to_Timer(){newPosition = myEnc.read()/4;} // interrupt function
void loop() {
  button.loop();  // MUST call the loop() function first
  // read the current state of the rotary encoder&#039;s CLK pin
  CLK_state = digitalRead(CLK_PIN);

  if (button.isPressed()) {
    Serial.println(&quot;The button is pressed&quot;);
  }

     if(digitalRead(SW_PIN)==LOW){xxx++;myEnc.write(0);millis();delay(200);screen();k=1;if(xxx&gt;1){xxx=0;}}// encoder button activation analogRead
   //tft.setTextSize(1);
   tft.setFreeFont(&amp;FreeSans9pt7b);
   set_menu();
  /////////////////////////////////////////// processing encoder commands  
    if(menu==0&amp;&amp;xxx==1){
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      vol=vol+newPosition;myEnc.write(0);newPosition=0;w=1;w1=1;if(vol&gt;0){vol=0;}if(vol&lt;-79){vol=-79;}audio();}}
    if(menu==1&amp;&amp;xxx==1){
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      treb=treb+newPosition;myEnc.write(0);newPosition=0;w=1;w2=1;if(treb&gt;15){treb=15;}if(treb&lt;-15){treb=-15;}audio();}}
    if(menu==2&amp;&amp;xxx==1){
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      mid=mid+newPosition;myEnc.write(0);newPosition=0;w=1;w3=1;if(mid&gt;15){mid=15;}if(mid&lt;-15){mid=-15;}audio();}}
    if(menu==3&amp;&amp;xxx==1){
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      bass=bass+newPosition;myEnc.write(0);newPosition=0;w=1;w4=1;if(bass&gt;15){bass=15;}if(bass&lt;-15){bass=-15;}audio();}}
    if(menu==4&amp;&amp;xxx==1){
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      in0=in0+newPosition;myEnc.write(0);newPosition=0;w=1;w5=1;w6=1;if(in0&gt;5){in0=0;}if(in0&lt;0){in0=5;}
         inn();set_vol_att();audio();}}
         inn();set_vol_att();
    if(menu==5&amp;&amp;xxx==1){inn();
         set_vol_att();
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      vol_att=vol_att+newPosition;myEnc.write(0);newPosition=0;w=1;w6=1;w5=1;if(vol_att&lt;-15){vol_att=-15;}if(vol_att&gt;15){vol_att=15;}audio();}inn();  
      switch(in){case 0: vol0 = vol_att;break;case 1: vol1 = vol_att;break;case 2: vol2 = vol_att;break;case 4: vol5=vol_att;break;case 5: vol3 = vol_att;break;case 6: vol4 = vol_att;break;}}
    if(menu==6&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       att_lf=att_lf+newPosition;myEnc.write(0);newPosition=0;w=1;w7=1;if(att_lf&gt;0){att_lf=0;}if(att_lf&lt;-30){att_lf=-30;}audio();}}  
   if(menu==7&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       att_rf=att_rf+newPosition;myEnc.write(0);newPosition=0;w=1;w8=1;if(att_rf&gt;0){att_rf=0;}if(att_rf&lt;-30){att_rf=-30;}audio();}} 
   if(menu==8&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       att_lr=att_lr+newPosition;myEnc.write(0);newPosition=0;w=1;w9=1;if(att_lr&gt;0){att_lr=0;}if(att_lr&lt;-30){att_lr=-30;}audio();}}
   if(menu==9&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       att_rr=att_rr+newPosition;myEnc.write(0);newPosition=0;w=1;w10=1;if(att_rr&gt;0){att_rr=0;}if(att_rr&lt;-30){att_rr=-30;}audio();}}
   if(menu==10&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       att_l=att_l+newPosition;myEnc.write(0);newPosition=0;w=1;w11=1;if(att_l&gt;0){att_l=0;}if(att_l&lt;-30){att_l=-30;}audio();}}
   if(menu==11&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       att_r=att_r+newPosition;myEnc.write(0);newPosition=0;w=1;w12=1;if(att_r&gt;0){att_r=0;}if(att_r&lt;-30){att_r=-30;}audio();}}
   if(menu==12&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       loun_f=loun_f+newPosition;myEnc.write(0);newPosition=0;w=1;w13=1;if(loun_f&gt;3){loun_f=0;}if(loun_f&lt;0){loun_f=3;}audio();}} 
   if(menu==13&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       loun=loun+newPosition;myEnc.write(0);newPosition=0;w=1;w14=1;if(loun&gt;0){loun=0;}if(loun&lt;-15){loun=-15;}audio();}}
   if(menu==14&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       treb_f=treb_f+newPosition;myEnc.write(0);newPosition=0;w=1;w15=1;if(treb_f&gt;3){treb_f=0;}if(treb_f&lt;0){treb_f=3;}audio();}}
   if(menu==15&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       mid_f=mid_f+newPosition;myEnc.write(0);newPosition=0;w=1;w16=1;if(mid_f&gt;3){mid_f=0;}if(mid_f&lt;0){mid_f=3;}audio();}}
   if(menu==16&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       bass_f=bass_f+newPosition;myEnc.write(0);newPosition=0;w=1;w17=1;if(bass_f&gt;3){bass_f=0;}if(bass_f&lt;0){bass_f=3;}audio();}}
   if(menu==17&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       sub_f=sub_f+newPosition;myEnc.write(0);newPosition=0;w=1;w18=1;if(sub_f&gt;3){sub_f=0;}if(sub_f&lt;0){sub_f=3;}audio();}}
   if(menu==18&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       mid_q=mid_q+newPosition;myEnc.write(0);newPosition=0;w=1;w19=1;if(mid_q&gt;3){mid_q=0;}if(mid_q&lt;0){mid_q=3;}audio();}}
   if(menu==19&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       bass_q=bass_q+newPosition;myEnc.write(0);newPosition=0;w=1;w20=1;if(bass_q&gt;3){bass_q=0;}if(bass_q&lt;0){bass_q=3;}audio();}}
   if(menu==20&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       phase=phase+newPosition;myEnc.write(0);newPosition=0;w=1;w21=1;if(phase&gt;1){phase=0;}if(phase&lt;0){phase=1;}audio();}}

   set_menu();
    ///// Output of tda adjustment names
          if(v0==1){   if(menu==0) if(xxx==1)tft.setTextColor(TFT_PURPLE);
                       else tft.setTextColor(TFT_WHITE); // 0xf5,0xe0,0x12
                       else tft.setTextColor(TFT_BLUE);tft.setCursor(5,13);tft.print(&quot;VOLUME&quot;);tft.setCursor(290,13);tft.print(&quot;dB&quot;);  v0=0;}
          if(v1==1){   if(menu==1) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(TFT_WHITE);
                       else tft.setTextColor(TFT_YELLOW);tft.setCursor(5,30);tft.print(&quot;TREBLE&quot;);tft.setCursor(290,30);tft.print(&quot;dB&quot;); v1=0;}
          if(v2==1){   if(menu==2) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(TFT_WHITE);
                       else tft.setTextColor(TFT_GREEN);tft.setCursor(5,45);tft.print(&quot;MIDDLE&quot;);tft.setCursor(290,45);tft.print(&quot;dB&quot;);v2=0;}
          if(v3==1){   if(menu==3) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(TFT_WHITE);
                       else tft.setTextColor(TFT_RED);tft.setCursor(5,60);tft.print(&quot;BASS  &quot;);tft.setCursor(290,60);tft.print(&quot;dB&quot;);v3=0;}
          if(v4==1){   if(menu==4) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(255,255,255);
                       else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,75);tft.print(&quot;IN &quot;);v4=0;}
          if(v5==1){   if(menu==5) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(TFT_WHITE);
                       else tft.setTextColor(TFT_OLIVE);tft.setCursor(160,75);tft.print(&quot;ATT&quot;);tft.setCursor(290,75);tft.print(&quot;dB&quot;);v5=0;}
          if(v6==1){   if(menu==6) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(TFT_WHITE);
                       else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,90);tft.print(&quot;ATT LF&quot;);v6=0;}
          if(v7==1){   if(menu==7) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(255,255,255);
                       else tft.setTextColor(TFT_OLIVE);tft.setCursor(160,90);tft.print(&quot;ATT RF&quot;);v7=0;}
          if(v8==1){   if(menu==8) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(TFT_WHITE);
                       else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,105);tft.print(&quot;ATT LR&quot;);v8=0;}
          if(v9==1){   if(menu==9) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(TFT_WHITE);
                       else tft.setTextColor(TFT_OLIVE);tft.setCursor(160,105);tft.print(&quot;ATT RR&quot;);v9=0;}
          if(v10==1){ if(menu==10) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,120);tft.print(&quot;ATT SL&quot;);v10=0;}
          if(v11==1){ if(menu==11) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(160,120);tft.print(&quot;ATT SR&quot;);v11=0;}
          if(v12==1){ if(menu==12) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,135);tft.print(&quot;LN&quot;);v12=0;}
          if(v13==1){ if(menu==13) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(180,135);tft.print(&quot;ATT&quot;);v13=0;}
          if(v14==1){ if(menu==14) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,150);tft.print(&quot;Treb CF&quot;);v14=0;}
          if(v15==1){ if(menu==15) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(128, 128, 0);tft.setCursor(5,165);tft.print(&quot;Midd CF&quot;);v15=0;}
          if(v16==1){ if(menu==16) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else{tft.setTextColor(TFT_OLIVE);}tft.setCursor(5,180);tft.print(&quot;Bass CF&quot;);v16=0;}
          if(v17==1){ if(menu==17) if(xxx==1)tft.setTextColor(0,165,255);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,195);tft.print(&quot;Subw CF&quot;);v17=0;}
          if(v18==1){ if(menu==18) if(xxx==1)tft.setTextColor(TFT_PURPLE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,210);tft.print(&quot;Midd QF&quot;);v18=0;}
          if(v19==1){ if(menu==19) if(xxx==1)tft.setTextColor(TFT_PURPLE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,225);tft.print(&quot;Bass QF&quot;);v19=0;}
          if(v20==1){ if(menu==20) if(xxx==1)tft.setTextColor(TFT_PURPLE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,240);tft.print(&quot;Phase Sub&quot;);v20=0;}
     set_menu();
///////////////////output of numerical values of parameters
  if(w1==1){tft.setTextColor(TFT_BLUE);tft.fillRect(100,1,100,12,TFT_BLUE); // x,y,w h // drawLine X1,Y1,X2,Y2
   //ucg.setColor(0,0,0);ucg.drawBox(100,1,80,12);
   tft.setTextColor(TFT_WHITE);tft.setCursor(230,15);tft.print(vol);w1=0;}
  if(w2==1){tft.setTextColor(TFT_YELLOW);tft.drawRect(100,16,100,12,TFT_YELLOW);   //ucg.setColor(150+treb*5,150+treb*4,0);ucg.drawLine(110,27,56+treb*4+109,17);
   //ucg.setColor(0,0,0);ucg.drawBox(67+treb*2+110,16,80+treb*2+110,12);
   tft.setTextColor(TFT_WHITE);tft.setCursor(230,30);tft.print(treb);tft.print(&quot; &quot;);w2=0;}
  if(w3==1){tft.setTextColor(TFT_GREEN);tft.drawRect(100,31,100,12,TFT_GREEN); ///ucg.setColor(0,150+mid*5,0);ucg.drawLine(110,42,56+mid*4+109,32);
   //ucg.setColor(0,0,0);ucg.drawLine(57+mid*4+109,42,80+mid*4+109,32);
   tft.setTextColor(TFT_WHITE);tft.setCursor(230,45);tft.print(mid);tft.print(&quot; &quot;);w3=0;}
  if(w4==1){tft.setTextColor(TFT_RED);tft.drawRect(100,46,100,12,TFT_RED); //ucg.setColor(150+bass*5,0,0);ucg.drawLine(110,57,56+bass*4+109,47);
   //ucg.setColor(0,0,0);ucg.drawLine(57+bass*5+109,57,80+bass*4+109,47);
   tft.setTextColor(TFT_WHITE);tft.setCursor(230,60);tft.print(bass);tft.print(&quot; &quot;);w4=0;}
  if(w5==1){tft.setTextColor(TFT_WHITE);  //myGLCD.printNumI(in0,60, 75,1);}
     switch(in0){
      case 0: tft.setCursor(50,75);tft.print(&quot;BT_IN&quot;);break;
      case 1: tft.setCursor(50,75);tft.print(&quot;CD_IN&quot;);break;
      case 2: tft.setCursor(50,75);tft.print(&quot;TV_IN&quot;);break;
      case 3: tft.setCursor(50,75);tft.print(&quot;PHONO&quot;);break;
      case 4: tft.setCursor(50,75);tft.print(&quot;AUX1 &quot;);break;
      case 5: tft.setCursor(50,75);tft.print(&quot;AUX2 &quot;);break;
     }
  }  
  if(w5==1||w6==1){tft.setTextColor(TFT_WHITE);tft.setCursor(225,75);tft.print(vol_att);tft.print(&quot; &quot;);w6=0;w5=0;}
  if(w7==1){tft.setTextColor(TFT_WHITE);tft.setCursor(100,90);tft.print(att_lf);tft.print(&quot; &quot;);w7=0;}
  if(w8==1){tft.setTextColor(TFT_WHITE);tft.setCursor(265,90);tft.print(att_rf);tft.print(&quot; &quot;);w8=0;}
  if(w9==1){tft.setTextColor(TFT_WHITE);tft.setCursor(100,105);tft.print(att_lr);tft.print(&quot; &quot;);w9=0;}
  if(w10==1){tft.setTextColor(TFT_WHITE);tft.setCursor(265,105);tft.print(att_rr);tft.print(&quot; &quot;);w10=0;}
  if(w11==1){tft.setTextColor(TFT_WHITE);tft.setCursor(100,120);tft.print(att_l);tft.print(&quot; &quot;);w11=0;}
  if(w12==1){tft.setTextColor(TFT_WHITE);tft.setCursor(265,120);tft.print(att_r);tft.print(&quot; &quot;);w12=0;}
  if(w13==1){tft.setTextColor(TFT_WHITE);
   switch(loun_f){case 0: tft.setCursor(50,135);tft.print(&quot; FLAT  &quot;);break;
                  case 1: tft.setCursor(50,135);tft.print(&quot;400 Hz &quot;);break;
                  case 2: tft.setCursor(50,135);tft.print(&quot;800 Hz &quot;);break;
                  case 3: tft.setCursor(50,135);tft.print(&quot;2.4 kHz&quot;);break;};w13=0;}
  if(w14==1){tft.setTextColor(TFT_WHITE);tft.setCursor(265,135);tft.print(loun);tft.print(&quot; &quot;);w14=0;}
  if(w15==1){tft.setTextColor(TFT_WHITE);
    switch(treb_f){case 0: tft.setCursor(210,150);tft.print(&quot;10.0 kHz&quot;);break;
                   case 1: tft.setCursor(210,150);tft.print(&quot;12.5 kHz&quot;);break;
                   case 2: tft.setCursor(210,150);tft.print(&quot;15.0 kHz&quot;);break;
                   case 3: tft.setCursor(210,150);tft.print(&quot;17.5 kHz&quot;);break;}w15=0;}
  if(w16==1){tft.setTextColor(TFT_WHITE);
    switch(mid_f){case 0: tft.setCursor(220,165);tft.print(&quot;0.5 kHz&quot;);break;
                  case 1: tft.setCursor(220,165);tft.print(&quot;1.0 kHz&quot;);break;
                  case 2: tft.setCursor(220,165);tft.print(&quot;1.5 kHz&quot;);break;
                  case 3: tft.setCursor(220,165);tft.print(&quot;2.5 kHz&quot;);break;}w16=0;}
  if(w17==1){tft.setTextColor(TFT_WHITE);
    switch(bass_f){case 0: tft.setCursor(220,180);tft.print(&quot; 60 Hz&quot;);break;
                   case 1: tft.setCursor(220,180);tft.print(&quot; 80 Hz&quot;);break;
                   case 2: tft.setCursor(220,180);tft.print(&quot;100 Hz&quot;);break;
                   case 3: tft.setCursor(220,180);tft.print(&quot;200 Hz&quot;);break;}w17=0;}
  if(w18==1){tft.setTextColor(TFT_WHITE);
    switch(sub_f){case 0: tft.setCursor(220,195);tft.print(&quot; FLAT  &quot;);break;
                  case 1: tft.setCursor(220,195);tft.print(&quot; 80 Hz &quot;);break;
                  case 2: tft.setCursor(220,195);tft.print(&quot;120 Hz&quot;);break;
                  case 3: tft.setCursor(220,195);tft.print(&quot;160 Hz&quot;);break;}w18=0;}
  if(w19==1){tft.setTextColor(TFT_WHITE);
    switch(mid_q){case 0: tft.setCursor(240,210);tft.print(&quot;0.5 &quot;);break;
                  case 1: tft.setCursor(240,210);tft.print(&quot;0.75&quot;);break;
                  case 2: tft.setCursor(240,210);tft.print(&quot;1.0 &quot;);break;
                  case 3: tft.setCursor(240,210);tft.print(&quot;1.25&quot;);break;}w19=0;}
  if(w20==1){tft.setTextColor(255,255,255);
    switch(bass_q){case 0: tft.setCursor(240,225);tft.print(&quot;1.0 &quot;);break;
                   case 1: tft.setCursor(240,225);tft.print(&quot;1.25&quot;);break;
                   case 2: tft.setCursor(240,225);tft.print(&quot;1.5 &quot;);break;
                   case 3: tft.setCursor(240,225);tft.print(&quot;2.0 &quot;);break;}w20=0;}
  if(w21==1){tft.setTextColor(TFT_WHITE);
    switch(phase){case 0: tft.setCursor(240,240);tft.print(&quot;180&quot;);break;
                 case 1: tft.setCursor(240,240);tft.print(&quot;  0&quot;);break;}w21=0;}

     ///////////////////// EEPROM /////////////////////////////////////////////
 if(millis()&gt;10000&amp;&amp;w==1){ inn();
     EEPROM.write(0,vol+79);EEPROM.write(1,treb+15);EEPROM.write(2,treb_f);EEPROM.write(3,mid+15);EEPROM.write(4,mid_f);EEPROM.write(5,bass+15);EEPROM.write(6,bass_f);
     EEPROM.write(7,loun+15);EEPROM.write(8,loun_f);EEPROM.write(9,att_lf+30);EEPROM.write(10,att_rf+30);EEPROM.write(11,att_lr+30);EEPROM.write(12,att_rr+30);
     EEPROM.write(13,att_l+30);EEPROM.write(14,att_r+30);EEPROM.write(15,sub_f);EEPROM.write(16,phase);EEPROM.write(17,bass_q);EEPROM.write(18,mid_q);
     EEPROM.write(18,mid_q);EEPROM.write(19,in0);EEPROM.write(20,vol0+15);EEPROM.write(21,vol1+15);EEPROM.write(22,vol2+15);EEPROM.write(23,vol3+15);EEPROM.write(24,vol4+15);
     EEPROM.write(25,vol5+15);
     w=0;menu=0;v0=1,v1=1,v2=1,v3=1,v4=1,v5=1,v6=1,v7=1,v8=1,v9=1,v10=1,v11=1,v12=1,v13=1,v14=1,v15=1,v16=1,v17=1,v18=1,v19=1,v20=1;y=0;xxx=1;
     }

}// loop
void screen(){ //////////// to save resources when changing when moving through parameters, update only the last two parameters
  switch(menu){
    case 0: v20=1;v0=1;v1=1; set_menu();break;
    case 1: v0=1;v1=1;v2=1; set_menu();break;
    case 2: v1=1;v2=1;v3=1; set_menu();break;
    case 3: v2=1;v3=1;v4=1; set_menu();break;
    case 4: v3=1;v4=1;v5=1; set_menu();break;
    case 5: v4=1;v5=1;v6=1; set_menu();break;
    case 6: v5=1;v6=1;v7=1; set_menu();break;
    case 7: v6=1;v7=1;v8=1; set_menu();break;
    case 8: v7=1;v8=1;v9=1; set_menu();break;
    case 9: v8=1;v9=1;v10=1; set_menu();break;
    case 10: v9=1;v10=1;v11=1; set_menu();break;
    case 11: v10=1;v11=1;v12=1; set_menu();break;
    case 12: v11=1;v12=1;v13=1; set_menu();break;
    case 13: v12=1;v13=1;v14=1; set_menu();break;
    case 14: v13=1;v14=1;v15=1; set_menu();break;
    case 15: v14=1;v15=1;v16=1; set_menu();break;
    case 16: v15=1;v16=1;v17=1; set_menu();break;
    case 17: v16=1;v17=1;v18=1; set_menu();break;
    case 18: v17=1;v18=1;v19=1; set_menu();break;
    case 19: v18=1;v19=1;v20=1; set_menu();break;
    case 20: v19=1;v20=1;v0=1; set_menu();break;
    }
  }
//////////////////// menu navigation function
 void set_menu(){if(xxx==0){newPosition1 = myEnc.read()/4;
      if (newPosition1 != oldPosition1) {
      oldPosition1 = newPosition1;
      menu=menu+newPosition1;myEnc.write(0);newPosition1=0;millis();w=1;screen();if(menu&gt;20){menu=0;}if(menu&lt;0){menu=20;}}}else{if(k==1);k=0;}
      }

void set_vol_att(){switch(in){case 0: vol_att = vol0;break;case 1: vol_att = vol1;break;case 2: vol_att = vol2;break;
                               case 4: vol_att = vol5;break;case 5: vol_att = vol3;break;case 6: vol_att = vol4;break;}}
void inn(){if(in0==3){in=6;}else{in=in0;}}

void audio(){
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(1,0,0,1,0,1,1); // 0...1, 0...1, 0...3, 0...1, 0...1, 0...1, 0...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(vol_att,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,phase,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
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/08/9889ca223332a351614dfaad1b120230.jpg" alt="http://forum.rcl-radio.ru/uploads/images/2025/08/9889ca223332a351614dfaad1b120230.jpg" /></span></p>]]></description>
			<author><![CDATA[null@example.com (pued1970)]]></author>
			<pubDate>Mon, 18 Aug 2025 03:23:23 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11885#p11885</guid>
		</item>
		<item>
			<title><![CDATA[ESP32-C3 TDA7719 TFT9341]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=11800#p11800</link>
			<description><![CDATA[<p>I tested the compilation and it worked. I uploaded it to the board, but there is no screenshot. I don&#039;t know where the problem is.</p><br /><div class="codebox"><pre><code>#include &lt;TFT_eSPI.h&gt; // Hardware-specific library
#include &lt;SPI.h&gt;
#include &lt;TDA7719.h&gt;
#include &lt;Encoder.h&gt;
#include &lt;EEPROM.h&gt;
//#include &lt;MsTimer2.h&gt;

//#define TFT_MOSI  PIN_D7  // 
//#define TFT_SCLK  PIN_D5  // 
//#define TFT_CS    PIN_D6  // Chip select control
//#define TFT_DC    PIN_D4  // Data Command control pin
//#define TFT_RST   PIN_D3

TDA7719 tda;
TFT_eSPI tft = TFT_eSPI();       // Invoke custom library
Encoder myEnc(10, 9);//CLK, DT encoder connection

int k=1,i,q=1,y=1,w1=1,w2=1,w3=1,w4=1,w5=1,w6=1,w7=1,w8=1,w9=1,w10=1,w11=1,w12=1,w13=1,w14=1,w15=1,w16=1,w17=1,w18=1,w19=1,w20=1,w21=1;
int v0=1,v1=1,v2=1,v3=1,v4=1,v5=1,v6=1,v7=1,v8=1,v9=1,v10=1,v11=1,v12=1,v13=1,v14=1,v15=1,v16=1,v17=1,v18=1,v19=1,v20=1;
int w=1,ccc,xxx=1,menu=0,menu_old,vol,in,in0,loun,loun_f,vol_att,treb,treb_f,mid,mid_q,bass,bass_q,sub_f,phase,mid_f,bass_f,att_lf,att_rf,att_lr,att_rr,att_l,att_r,vol0,vol1,vol2,vol3,vol4,vol5;
unsigned long newPosition,oldPosition  = -999,newPosition1,oldPosition1  = -999;

//byte power;
//long time0,times1;

// Rotary Encoder Inputs
 #define encoderCLK 10   //S3
 #define encoderDT 9   //S2
 #define encoderSW 16    //D0

void setup(void) {
   Serial.begin(9600);
  
   pinMode (encoderCLK,INPUT);
   pinMode (encoderDT,INPUT);
   pinMode (encoderSW, INPUT);

   vol = EEPROM.read(0)-79;treb = EEPROM.read(1)-15;treb_f = EEPROM.read(2);mid = EEPROM.read(3)-15;mid_f = EEPROM.read(4);bass = EEPROM.read(5)-15;bass_f = EEPROM.read(6);
   loun = EEPROM.read(7)-15;loun_f = EEPROM.read(8);att_lf=EEPROM.read(9)-30;att_rf=EEPROM.read(10)-30;att_lr=EEPROM.read(11)-30;att_rr=EEPROM.read(12)-30;
   att_l=EEPROM.read(13)-30;att_r=EEPROM.read(14)-30;sub_f=EEPROM.read(15);phase=EEPROM.read(16);bass_q=EEPROM.read(17);mid_q=EEPROM.read(18);
   in0=EEPROM.read(19);vol0=EEPROM.read(20)-15;vol1=EEPROM.read(21)-15;vol2=EEPROM.read(22)-15;vol3=EEPROM.read(23)-15;vol4=EEPROM.read(24)-15;inn();vol5=EEPROM.read(25)-15;inn();
   delay(300);audio();// we transfer all settings from memory to tda

  tft.begin();
  //tft.init();
  tft.setRotation(1);
  for(int i=0; i&lt;2; i++){                                                
    tft.drawLine(0+i,0+i,319-i*2,239-i*2,TFT_OLIVE);}      //draw the outer border (0+i,0+i,319-i*2,239-i*2)
    //tft.drawRFrame(10,10,299,219,8,TFT_OLIVE);             //draw an inner border with rounded corners

  tft.fillScreen(TFT_BLACK);
  tft.setTextSize(3);
  tft.setTextColor(TFT_YELLOW);
  tft.setCursor(35, 80);
  tft.print(&quot;AUDIO PROCEESOR&quot;);
  tft.setTextColor(TFT_GREEN);
  tft.setCursor(60, 120);
  tft.print(&quot;TONE CONTROL&quot;);
  tft.setCursor(120, 160);
  tft.print(&quot;HI-END&quot;);

}
void to_Timer(){newPosition = myEnc.read()/4;} // interrupt function
void loop() {
     if(digitalRead(encoderSW)==LOW){xxx++;myEnc.write(0);millis();delay(200);screen();k=1;if(xxx&gt;1){xxx=0;}}// encoder button activation analogRead
   tft.setTextSize(1);
   set_menu();
  /////////////////////////////////////////// processing encoder commands  
    if(menu==0&amp;&amp;xxx==1){
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      vol=vol+newPosition;myEnc.write(0);newPosition=0;w=1;w1=1;if(vol&gt;0){vol=0;}if(vol&lt;-79){vol=-79;}audio();}}
    if(menu==1&amp;&amp;xxx==1){
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      treb=treb+newPosition;myEnc.write(0);newPosition=0;w=1;w2=1;if(treb&gt;15){treb=15;}if(treb&lt;-15){treb=-15;}audio();}}
    if(menu==2&amp;&amp;xxx==1){
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      mid=mid+newPosition;myEnc.write(0);newPosition=0;w=1;w3=1;if(mid&gt;15){mid=15;}if(mid&lt;-15){mid=-15;}audio();}}
    if(menu==3&amp;&amp;xxx==1){
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      bass=bass+newPosition;myEnc.write(0);newPosition=0;w=1;w4=1;if(bass&gt;15){bass=15;}if(bass&lt;-15){bass=-15;}audio();}}
    if(menu==4&amp;&amp;xxx==1){
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      in0=in0+newPosition;myEnc.write(0);newPosition=0;w=1;w5=1;w6=1;if(in0&gt;5){in0=0;}if(in0&lt;0){in0=5;}
         inn();set_vol_att();audio();}}
         inn();set_vol_att();
    if(menu==5&amp;&amp;xxx==1){inn();
         set_vol_att();
      if (newPosition != oldPosition) {
      oldPosition = newPosition;
      vol_att=vol_att+newPosition;myEnc.write(0);newPosition=0;w=1;w6=1;w5=1;if(vol_att&lt;-15){vol_att=-15;}if(vol_att&gt;15){vol_att=15;}audio();}inn();  
      switch(in){case 0: vol0 = vol_att;break;case 1: vol1 = vol_att;break;case 2: vol2 = vol_att;break;case 4: vol5=vol_att;break;case 5: vol3 = vol_att;break;case 6: vol4 = vol_att;break;}}
    if(menu==6&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       att_lf=att_lf+newPosition;myEnc.write(0);newPosition=0;w=1;w7=1;if(att_lf&gt;0){att_lf=0;}if(att_lf&lt;-30){att_lf=-30;}audio();}}  
   if(menu==7&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       att_rf=att_rf+newPosition;myEnc.write(0);newPosition=0;w=1;w8=1;if(att_rf&gt;0){att_rf=0;}if(att_rf&lt;-30){att_rf=-30;}audio();}} 
   if(menu==8&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       att_lr=att_lr+newPosition;myEnc.write(0);newPosition=0;w=1;w9=1;if(att_lr&gt;0){att_lr=0;}if(att_lr&lt;-30){att_lr=-30;}audio();}}
   if(menu==9&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       att_rr=att_rr+newPosition;myEnc.write(0);newPosition=0;w=1;w10=1;if(att_rr&gt;0){att_rr=0;}if(att_rr&lt;-30){att_rr=-30;}audio();}}
   if(menu==10&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       att_l=att_l+newPosition;myEnc.write(0);newPosition=0;w=1;w11=1;if(att_l&gt;0){att_l=0;}if(att_l&lt;-30){att_l=-30;}audio();}}
   if(menu==11&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       att_r=att_r+newPosition;myEnc.write(0);newPosition=0;w=1;w12=1;if(att_r&gt;0){att_r=0;}if(att_r&lt;-30){att_r=-30;}audio();}}
   if(menu==12&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       loun_f=loun_f+newPosition;myEnc.write(0);newPosition=0;w=1;w13=1;if(loun_f&gt;3){loun_f=0;}if(loun_f&lt;0){loun_f=3;}audio();}} 
   if(menu==13&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       loun=loun+newPosition;myEnc.write(0);newPosition=0;w=1;w14=1;if(loun&gt;0){loun=0;}if(loun&lt;-15){loun=-15;}audio();}}
   if(menu==14&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       treb_f=treb_f+newPosition;myEnc.write(0);newPosition=0;w=1;w15=1;if(treb_f&gt;3){treb_f=0;}if(treb_f&lt;0){treb_f=3;}audio();}}
   if(menu==15&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       mid_f=mid_f+newPosition;myEnc.write(0);newPosition=0;w=1;w16=1;if(mid_f&gt;3){mid_f=0;}if(mid_f&lt;0){mid_f=3;}audio();}}
   if(menu==16&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       bass_f=bass_f+newPosition;myEnc.write(0);newPosition=0;w=1;w17=1;if(bass_f&gt;3){bass_f=0;}if(bass_f&lt;0){bass_f=3;}audio();}}
   if(menu==17&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       sub_f=sub_f+newPosition;myEnc.write(0);newPosition=0;w=1;w18=1;if(sub_f&gt;3){sub_f=0;}if(sub_f&lt;0){sub_f=3;}audio();}}
   if(menu==18&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       mid_q=mid_q+newPosition;myEnc.write(0);newPosition=0;w=1;w19=1;if(mid_q&gt;3){mid_q=0;}if(mid_q&lt;0){mid_q=3;}audio();}}
   if(menu==19&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       bass_q=bass_q+newPosition;myEnc.write(0);newPosition=0;w=1;w20=1;if(bass_q&gt;3){bass_q=0;}if(bass_q&lt;0){bass_q=3;}audio();}}
   if(menu==20&amp;&amp;xxx==1){
       if (newPosition != oldPosition) {
       oldPosition = newPosition;
       phase=phase+newPosition;myEnc.write(0);newPosition=0;w=1;w21=1;if(phase&gt;1){phase=0;}if(phase&lt;0){phase=1;}audio();}}

   set_menu();
    ///// Output of tda adjustment names
          if(v0==1){   if(menu==0) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(TFT_WHITE); // 0xf5,0xe0,0x12
                       else tft.setTextColor(TFT_BLUE);tft.setCursor(5,13);tft.print(&quot;VOLUME&quot;);tft.setCursor(290,13);tft.print(&quot;dB&quot;);  v0=0;}
          if(v1==1){   if(menu==1) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(TFT_WHITE);
                       else tft.setTextColor(TFT_YELLOW);tft.setCursor(5,30);tft.print(&quot;TREBLE&quot;);tft.setCursor(290,30);tft.print(&quot;dB&quot;); v1=0;}
          if(v2==1){   if(menu==2) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(TFT_WHITE);
                       else tft.setTextColor(TFT_GREEN);tft.setCursor(5,45);tft.print(&quot;MIDDLE&quot;);tft.setCursor(290,45);tft.print(&quot;dB&quot;);v2=0;}
          if(v3==1){   if(menu==3) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(TFT_WHITE);
                       else tft.setTextColor(TFT_RED);tft.setCursor(5,60);tft.print(&quot;BASS  &quot;);tft.setCursor(290,60);tft.print(&quot;dB&quot;);v3=0;}
          if(v4==1){   if(menu==4) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(255,255,255);
                       else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,75);tft.print(&quot;IN &quot;);v4=0;}
          if(v5==1){   if(menu==5) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(TFT_WHITE);
                       else tft.setTextColor(TFT_OLIVE);tft.setCursor(160,75);tft.print(&quot;ATT&quot;);tft.setCursor(290,75);tft.print(&quot;dB&quot;);v5=0;}
          if(v6==1){   if(menu==6) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(TFT_WHITE);
                       else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,90);tft.print(&quot;ATT LF&quot;);v6=0;}
          if(v7==1){   if(menu==7) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(255,255,255);
                       else tft.setTextColor(TFT_OLIVE);tft.setCursor(160,90);tft.print(&quot;ATT RF&quot;);v7=0;}
          if(v8==1){   if(menu==8) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(TFT_WHITE);
                       else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,105);tft.print(&quot;ATT LR&quot;);v8=0;}
          if(v9==1){   if(menu==9) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                       else tft.setTextColor(TFT_WHITE);
                       else tft.setTextColor(TFT_OLIVE);tft.setCursor(160,105);tft.print(&quot;ATT RR&quot;);v9=0;}
          if(v10==1){ if(menu==10) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,120);tft.print(&quot;ATT SL&quot;);v10=0;}
          if(v11==1){ if(menu==11) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(160,120);tft.print(&quot;ATT SR&quot;);v11=0;}
          if(v12==1){ if(menu==12) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,135);tft.print(&quot;LN&quot;);v12=0;}
          if(v13==1){ if(menu==13) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(180,135);tft.print(&quot;ATT&quot;);v13=0;}
          if(v14==1){ if(menu==14) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,150);tft.print(&quot;Treb CF&quot;);v14=0;}
          if(v15==1){ if(menu==15) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(128, 128, 0);tft.setCursor(5,165);tft.print(&quot;Midd CF&quot;);v15=0;}
          if(v16==1){ if(menu==16) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else{tft.setTextColor(TFT_OLIVE);}tft.setCursor(5,180);tft.print(&quot;Bass CF&quot;);v16=0;}
          if(v17==1){ if(menu==17) if(xxx==1)tft.setTextColor(0,165,255);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,195);tft.print(&quot;Subw CF&quot;);v17=0;}
          if(v18==1){ if(menu==18) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,210);tft.print(&quot;Midd QF&quot;);v18=0;}
          if(v19==1){ if(menu==19) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,225);tft.print(&quot;Bass QF&quot;);v19=0;}
          if(v20==1){ if(menu==20) if(xxx==1)tft.setTextColor(TFT_ORANGE);
                      else tft.setTextColor(TFT_WHITE);
                      else tft.setTextColor(TFT_OLIVE);tft.setCursor(5,240);tft.print(&quot;Phase Sub&quot;);v20=0;}
     set_menu();
///////////////////output of numerical values of parameters
  if(w1==1){tft.setTextColor(TFT_BLUE);tft.drawRect(100,1,100,12,TFT_BLUE); // x,y,w h // drawLine X1,Y1,X2,Y2
   //ucg.setColor(0,0,0);ucg.drawBox(100,1,80,12);
   tft.setTextColor(TFT_WHITE);tft.setCursor(230,15);tft.print(vol);w1=0;}
  if(w2==1){tft.setTextColor(TFT_YELLOW);tft.drawRect(100,16,100,12,TFT_YELLOW);   //ucg.setColor(150+treb*5,150+treb*4,0);ucg.drawLine(110,27,56+treb*4+109,17);
   //ucg.setColor(0,0,0);ucg.drawBox(67+treb*2+110,16,80+treb*2+110,12);
   tft.setTextColor(TFT_WHITE);tft.setCursor(230,30);tft.print(treb);tft.print(&quot; &quot;);w2=0;}
  if(w3==1){tft.setTextColor(TFT_GREEN);tft.drawRect(100,31,100,12,TFT_GREEN); ///ucg.setColor(0,150+mid*5,0);ucg.drawLine(110,42,56+mid*4+109,32);
   //ucg.setColor(0,0,0);ucg.drawLine(57+mid*4+109,42,80+mid*4+109,32);
   tft.setTextColor(TFT_WHITE);tft.setCursor(230,45);tft.print(mid);tft.print(&quot; &quot;);w3=0;}
  if(w4==1){tft.setTextColor(TFT_RED);tft.drawRect(100,46,100,12,TFT_RED); //ucg.setColor(150+bass*5,0,0);ucg.drawLine(110,57,56+bass*4+109,47);
   //ucg.setColor(0,0,0);ucg.drawLine(57+bass*5+109,57,80+bass*4+109,47);
   tft.setTextColor(TFT_WHITE);tft.setCursor(230,60);tft.print(bass);tft.print(&quot; &quot;);w4=0;}
  if(w5==1){tft.setTextColor(TFT_WHITE);  //myGLCD.printNumI(in0,60, 75,1);}
     switch(in0){
      case 0: tft.setCursor(50,75);tft.print(&quot;BT_IN&quot;);break;
      case 1: tft.setCursor(50,75);tft.print(&quot;CD_IN&quot;);break;
      case 2: tft.setCursor(50,75);tft.print(&quot;TV_IN&quot;);break;
      case 3: tft.setCursor(50,75);tft.print(&quot;PHONO&quot;);break;
      case 4: tft.setCursor(50,75);tft.print(&quot;AUX1 &quot;);break;
      case 5: tft.setCursor(50,75);tft.print(&quot;AUX2 &quot;);break;
     }
  }  
  if(w5==1||w6==1){tft.setTextColor(TFT_WHITE);tft.setCursor(225,75);tft.print(vol_att);tft.print(&quot; &quot;);w6=0;w5=0;}
  if(w7==1){tft.setTextColor(TFT_WHITE);tft.setCursor(100,90);tft.print(att_lf);tft.print(&quot; &quot;);w7=0;}
  if(w8==1){tft.setTextColor(TFT_WHITE);tft.setCursor(265,90);tft.print(att_rf);tft.print(&quot; &quot;);w8=0;}
  if(w9==1){tft.setTextColor(TFT_WHITE);tft.setCursor(100,105);tft.print(att_lr);tft.print(&quot; &quot;);w9=0;}
  if(w10==1){tft.setTextColor(TFT_WHITE);tft.setCursor(265,105);tft.print(att_rr);tft.print(&quot; &quot;);w10=0;}
  if(w11==1){tft.setTextColor(TFT_WHITE);tft.setCursor(100,120);tft.print(att_l);tft.print(&quot; &quot;);w11=0;}
  if(w12==1){tft.setTextColor(TFT_WHITE);tft.setCursor(265,120);tft.print(att_r);tft.print(&quot; &quot;);w12=0;}
  if(w13==1){tft.setTextColor(TFT_WHITE);
   switch(loun_f){case 0: tft.setCursor(50,135);tft.print(&quot; FLAT  &quot;);break;
                  case 1: tft.setCursor(50,135);tft.print(&quot;400 Hz &quot;);break;
                  case 2: tft.setCursor(50,135);tft.print(&quot;800 Hz &quot;);break;
                  case 3: tft.setCursor(50,135);tft.print(&quot;2.4 kHz&quot;);break;};w13=0;}
  if(w14==1){tft.setTextColor(TFT_WHITE);tft.setCursor(265,135);tft.print(loun);tft.print(&quot; &quot;);w14=0;}
  if(w15==1){tft.setTextColor(TFT_WHITE);
    switch(treb_f){case 0: tft.setCursor(210,150);tft.print(&quot;10.0 kHz&quot;);break;
                   case 1: tft.setCursor(210,150);tft.print(&quot;12.5 kHz&quot;);break;
                   case 2: tft.setCursor(210,150);tft.print(&quot;15.0 kHz&quot;);break;
                   case 3: tft.setCursor(210,150);tft.print(&quot;17.5 kHz&quot;);break;}w15=0;}
  if(w16==1){tft.setTextColor(TFT_WHITE);
    switch(mid_f){case 0: tft.setCursor(220,165);tft.print(&quot;0.5 kHz&quot;);break;
                  case 1: tft.setCursor(220,165);tft.print(&quot;1.0 kHz&quot;);break;
                  case 2: tft.setCursor(220,165);tft.print(&quot;1.5 kHz&quot;);break;
                  case 3: tft.setCursor(220,165);tft.print(&quot;2.5 kHz&quot;);break;}w16=0;}
  if(w17==1){tft.setTextColor(TFT_WHITE);
    switch(bass_f){case 0: tft.setCursor(220,180);tft.print(&quot; 60 Hz&quot;);break;
                   case 1: tft.setCursor(220,180);tft.print(&quot; 80 Hz&quot;);break;
                   case 2: tft.setCursor(220,180);tft.print(&quot;100 Hz&quot;);break;
                   case 3: tft.setCursor(220,180);tft.print(&quot;200 Hz&quot;);break;}w17=0;}
  if(w18==1){tft.setTextColor(TFT_WHITE);
    switch(sub_f){case 0: tft.setCursor(220,195);tft.print(&quot; FLAT  &quot;);break;
                  case 1: tft.setCursor(220,195);tft.print(&quot; 80 Hz &quot;);break;
                  case 2: tft.setCursor(220,195);tft.print(&quot;120 Hz&quot;);break;
                  case 3: tft.setCursor(220,195);tft.print(&quot;160 Hz&quot;);break;}w18=0;}
  if(w19==1){tft.setTextColor(TFT_WHITE);
    switch(mid_q){case 0: tft.setCursor(240,210);tft.print(&quot;0.5 &quot;);break;
                  case 1: tft.setCursor(240,210);tft.print(&quot;0.75&quot;);break;
                  case 2: tft.setCursor(240,210);tft.print(&quot;1.0 &quot;);break;
                  case 3: tft.setCursor(240,210);tft.print(&quot;1.25&quot;);break;}w19=0;}
  if(w20==1){tft.setTextColor(255,255,255);
    switch(bass_q){case 0: tft.setCursor(240,225);tft.print(&quot;1.0 &quot;);break;
                   case 1: tft.setCursor(240,225);tft.print(&quot;1.25&quot;);break;
                   case 2: tft.setCursor(240,225);tft.print(&quot;1.5 &quot;);break;
                   case 3: tft.setCursor(240,225);tft.print(&quot;2.0 &quot;);break;}w20=0;}
  if(w21==1){tft.setTextColor(TFT_WHITE);
    switch(phase){case 0: tft.setCursor(240,240);tft.print(&quot;180&quot;);break;
                 case 1: tft.setCursor(240,240);tft.print(&quot;  0&quot;);break;}w21=0;}

     ///////////////////// EEPROM /////////////////////////////////////////////
 if(millis()&gt;10000&amp;&amp;w==1){ inn();
     EEPROM.write(0,vol+79);EEPROM.write(1,treb+15);EEPROM.write(2,treb_f);EEPROM.write(3,mid+15);EEPROM.write(4,mid_f);EEPROM.write(5,bass+15);EEPROM.write(6,bass_f);
     EEPROM.write(7,loun+15);EEPROM.write(8,loun_f);EEPROM.write(9,att_lf+30);EEPROM.write(10,att_rf+30);EEPROM.write(11,att_lr+30);EEPROM.write(12,att_rr+30);
     EEPROM.write(13,att_l+30);EEPROM.write(14,att_r+30);EEPROM.write(15,sub_f);EEPROM.write(16,phase);EEPROM.write(17,bass_q);EEPROM.write(18,mid_q);
     EEPROM.write(18,mid_q);EEPROM.write(19,in0);EEPROM.write(20,vol0+15);EEPROM.write(21,vol1+15);EEPROM.write(22,vol2+15);EEPROM.write(23,vol3+15);EEPROM.write(24,vol4+15);
     EEPROM.write(25,vol5+15);
     w=0;menu=0;v0=1,v1=1,v2=1,v3=1,v4=1,v5=1,v6=1,v7=1,v8=1,v9=1,v10=1,v11=1,v12=1,v13=1,v14=1,v15=1,v16=1,v17=1,v18=1,v19=1,v20=1;y=0;xxx=1;
     }

}// loop
void screen(){ //////////// to save resources when changing when moving through parameters, update only the last two parameters
  switch(menu){
    case 0: v20=1;v0=1;v1=1; set_menu();break;
    case 1: v0=1;v1=1;v2=1; set_menu();break;
    case 2: v1=1;v2=1;v3=1; set_menu();break;
    case 3: v2=1;v3=1;v4=1; set_menu();break;
    case 4: v3=1;v4=1;v5=1; set_menu();break;
    case 5: v4=1;v5=1;v6=1; set_menu();break;
    case 6: v5=1;v6=1;v7=1; set_menu();break;
    case 7: v6=1;v7=1;v8=1; set_menu();break;
    case 8: v7=1;v8=1;v9=1; set_menu();break;
    case 9: v8=1;v9=1;v10=1; set_menu();break;
    case 10: v9=1;v10=1;v11=1; set_menu();break;
    case 11: v10=1;v11=1;v12=1; set_menu();break;
    case 12: v11=1;v12=1;v13=1; set_menu();break;
    case 13: v12=1;v13=1;v14=1; set_menu();break;
    case 14: v13=1;v14=1;v15=1; set_menu();break;
    case 15: v14=1;v15=1;v16=1; set_menu();break;
    case 16: v15=1;v16=1;v17=1; set_menu();break;
    case 17: v16=1;v17=1;v18=1; set_menu();break;
    case 18: v17=1;v18=1;v19=1; set_menu();break;
    case 19: v18=1;v19=1;v20=1; set_menu();break;
    case 20: v19=1;v20=1;v0=1; set_menu();break;
    }
  }
//////////////////// menu navigation function
 void set_menu(){if(xxx==0){newPosition1 = myEnc.read()/4;
      if (newPosition1 != oldPosition1) {
      oldPosition1 = newPosition1;
      menu=menu+newPosition1;myEnc.write(0);newPosition1=0;millis();w=1;screen();if(menu&gt;20){menu=0;}if(menu&lt;0){menu=20;}}}else{if(k==1);k=0;}
      }

void set_vol_att(){switch(in){case 0: vol_att = vol0;break;case 1: vol_att = vol1;break;case 2: vol_att = vol2;break;
                               case 4: vol_att = vol5;break;case 5: vol_att = vol3;break;case 6: vol_att = vol4;break;}}
void inn(){if(in0==3){in=6;}else{in=in0;}}

void audio(){
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(1,0,0,1,0,1,1); // 0...1, 0...1, 0...3, 0...1, 0...1, 0...1, 0...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(vol_att,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,phase,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
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>]]></description>
			<author><![CDATA[null@example.com (pued1970)]]></author>
			<pubDate>Sun, 04 May 2025 07:52:00 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=11800#p11800</guid>
		</item>
	</channel>
</rss>
