226

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

Единственное у меня индикатор на  ST7789V подъедет а у Вас на ILI9341 это критично ?

227

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

2,4 дюймовый TFT полноцветный экран ST7735 ILI9341 интерфейс драйвера SPI .

Я делал под ILI9341.

Библиотека UTFT не поддерживает ST7789V

228

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

Библиотека UTFT не поддерживает ST7789V

Вот библиотека https://github.com/deirvlon/ST7789v-Arduino.git

229

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

С экраном разобрался , у меня пришёл экран ili 9341. Есть два момента нет показаний значений где громкость, высокие, средние и низкие. Очень неудобно потому что не понятно сколько это в децибелах 0 или +15 например. А второе залипает двойка при прокручивании bass center - 200 Hz.

230

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

Измените
case 0:tft.print("60 Hz", 220, 173);break;
  case 1:tft.print("80 Hz", 220, 173);break;
  case 2:tft.print("100Hz", 220, 173);break;
  case 3:tft.print("200Hz", 200, 173);break;

на

case 0:tft.print(" 60 Hz", 220, 173);break;
  case 1:tft.print(" 80 Hz", 220, 173);break;
  case 2:tft.print(" 100Hz", 220, 173);break;
  case 3:tft.print(" 200Hz", 200, 173);break;

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

231

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

Менять параметры приходиться не так часто а вот визуализации конечно не хватает. Если не сложно давайте попробуем это сделать. Двойку поправил , спасибо !

232

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

Hello everyone
I have a problem connecting to the red screen TFT 320x240 v1.3 display is not full screen. I will connect it to use with TDA7719 TDA7419 but it still does not display. But I tested with the test program and the result is as shown in the picture. Please help me.

Program used for testing.

/*
This is an example on how to use the 2.2" and 2.4" TFT 240x320 SPI ILI9341 display using the Adafruit library.

ILI9341 TFT SPI display pins for Arduino Uno/Nano:
This is a 3.3V device so you need to put a level shifter on all 5 data pins.
An easy way to do this is to use a 2.2K resistor between the data pin on the display to the pin on arduino, and
another resistor on the side of the display to a 3.3K resistor to ground. This creates a voltage divider to
convert the 5V output of arduino into a 3V logic. Do this for all 5 data pins.
 * LED =   10Ω (or more) resistor to 5V
 * SCK =   13
 * SDI =   11
 * D/C =   9
 * RESET = 8 or RST or 3.3V
 * CS =    10
 * GND =   GND
 * VCC =   5V or 3.3V (the display has it's own 3.3V regulator)

Hardware SPI Pins:
 * Arduino Uno   SCK=13, SDA=11
 * Arduino Nano  SCK=13, SDA=11
 * Arduino Due   SCK=76, SDA=75
 * Arduino Mega  SCK=52, SDA=51

SPI pin names can be confusing. These are the alternative names for the SPI pins:
MOSI = DIN = R/W = SDO = DI = SI = MTSR = SDA = D1 = SDI
CS = CE = RS = SS
DC = A0 = DO = DOUT = SO = MRST
RESET = RST
SCLK = CLK = E = SCK = SCL = D0

Libraries needed:
https://github.com/adafruit/Adafruit_ILI9341
https://github.com/adafruit/Adafruit-GFX-Library

Reference page for GFX Library: https://cdn-learn.adafruit.com/downloads/pdf/adafruit-gfx-graphics-library.pdf

Color is expressed in 16 bit with Hexadecimal value.
To select a particular color, go here and copy the "Hexadecimal 16 bit color depth value":
https://ee-programming-notepad.blogspot.com/2016/10/16-bit-color-generator-picker.html

Common colors:
 * BLACK    0x0000
 * BLUE     0x001F
 * RED      0xF800
 * GREEN    0x07E0
 * CYAN     0x07FF
 * MAGENTA  0xF81F
 * YELLOW   0xFFE0
 * WHITE    0xFFFF

List of custom fonts: https://learn.adafruit.com/adafruit-gfx-graphics-library/using-fonts

Note about custom font:
 * Text background color is not supported for custom fonts. For these reason you would need to draw a filled 
   rectangle before drawing the text. But this would cause the text to flicker, so I don't recommend using custom fonts
   for components that refresh continuously.
 * Using custom fonts slows down the arduino loop, so the refresh rate is lesser than using the standard font.

Sketch made by: InterlinkKnight
Last modification: 01/29/2018
*/

#include <Adafruit_GFX.h>    // Include core graphics library
#include <Adafruit_ILI9341.h> // Include Adafruit_ILI9341 library to drive the display

// Declare pins for the display:
#define TFT_DC 8  // 9
#define TFT_RST 9  // You can also connect this to the Arduino reset in which case, set this #define pin to -1!
#define TFT_CS 10
// The rest of the pins are pre-selected as the default hardware SPI for Arduino Uno (SCK = 13 and SDA = 11)

// Create display:
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);

#include <Fonts/FreeSerif24pt7b.h>  // Add a custom font

int Variable1;  // Create a variable to have something dynamic to show on the display

void setup()  // Start of setup
{

  // Display setup:
  
  tft.begin();  // Initialize display
  tft.fillScreen(0x0000);  // Fill screen with black

  //tft.setRotation(0);  // Set orientation of the display. Values are from 0 to 3. If not declared, orientation would be 0,
                         // which is portrait mode.

  tft.setTextWrap(false);  // By default, long lines of text are set to automatically “wrap” back to the leftmost column.
                           // To override this behavior (so text will run off the right side of the display - useful for
                           // scrolling marquee effects), use setTextWrap(false). The normal wrapping behavior is restored
                           // with setTextWrap(true).


  // We are going to print on the display everything that is static on the setup, to leave the loop free for dynamic elements:

  // Write to the display the text "Hello":
  tft.setCursor(0, 0);  // Set position (x,y)
  tft.setTextColor(0xFFFF);  // Set color of text. First is the color of text and after is color of background
  tft.setTextSize(4);  // Set text size. Goes from 0 (the smallest) to 20 (very big)
  tft.println("Hello");  // Print a text or value

  // Start using a custom font:
  tft.setFont(&FreeSerif24pt7b); // Set a custom font
  tft.setTextSize(0);  // Set text size. We are using custom font so you should always set text size as 0

  // Write to the display the text "World":
  tft.setCursor(0, 80);  // Set position (x,y)
  tft.setTextColor(0xF800);  // Set color of text. We are using custom font so there is no background color supported
  tft.println("World!");  // Print a text or value

  // Stop using a custom font
  tft.setFont();  // Reset to standard font, to stop using any custom font previously set


  // Draw rectangle:
  tft.drawRect(0, 110, 110, 60, 0x07FF);  // Draw rectangle (x,y,width,height,color)
                                             // It draws from the location to down-right
                                             
  // Draw rounded rectangle:
  tft.drawRoundRect(129, 110, 110, 60, 10, 0x07FF);  // Draw rounded rectangle (x,y,width,height,radius,color)
                                                       // It draws from the location to down-right
 

  // Draw triangle:
  tft.drawTriangle(100,240,    130,190,    160,240, 0xFFE0);  // Draw triangle (x0,y0,x1,y1,x2,y2,color)


  // Draw filled triangle:
  tft.fillTriangle(179,240,    209,190,    239,240, 0x07FF);  // Draw filled triangle (x0,y0,x1,y1,x2,y2,color)


  // Draw line:
  tft.drawLine(0, 250, 239, 250, 0x07FF);  // Draw line (x0,y0,x1,y1,color)
  

  //  Draw circle:
  tft.drawCircle(30, 289, 20, 0x07E0);  //  Draw circle (x,y,radius,color green)


  // Draw a filled circle:
  tft.fillCircle(110, 289, 25, 0x001F);  // Draw circle (x,y,radius,color red)


  // Draw filled rounded rectangle:
  tft.fillRoundRect(160, 259, 80, 60, 10, 0xF81B);  // Draw rounded filled rectangle (x,y,width,height,color)
  
}  // End of setup

void loop()  // Start of loop
{

  Variable1++;  // Increase variable by 1
  if(Variable1 > 150)  // If Variable1 is greater than 150
  {
    Variable1 = 0;  // Set Variable1 to 0
  }

// Convert Variable1 into a string, so we can change the text alignment to the right:
  // It can be also used to add or remove decimal numbers.
  char string[10];  // Create a character array of 10 characters
  // Convert float to a string:
  dtostrf(Variable1, 3, 0, string);  // (<variable>,<amount of digits we are going to use>,<amount of decimal digits>,<string name>)

// We are going to print on the display everything that is dynamic on the loop, to refresh continuously:

  // Write to the display the Variable1 with left text alignment:
  tft.setCursor(21, 125);  // Set position (x,y)
  tft.setTextColor(0xFFE0, 0x0000);  // Set color of text. First is the color of text and after is color of background
  tft.setTextSize(4);  // Set text size. Goes from 0 (the smallest) to 20 (very big)
  tft.println(Variable1);  // Print a text or value
  
  // There is a problem when we go, for example, from 100 to 99 because it doesn't automatically write a background on
  // the last digit we are not longer refreshing. We need to check how many digits are and fill the space remaining.
  if(Variable1 < 10)  // If Variable1 is less than 10...
  {
    // Fill the other digit with background color:
    tft.fillRect(44, 124, 24, 34, 0x0000);  // Draw filled rectangle (x,y,width,height,color)
  }
  if(Variable1 < 100)  // If Variable1 is less than 100...
  {
    // Fill the other digit with background color:
    tft.fillRect(69, 124, 24, 34, 0x0000);  // Draw filled rectangle (x,y,width,height,color)
  }

// Write to the display the string with right text alignment:
  tft.setCursor(150, 125);  // Set position (x,y)
  tft.setTextColor(0x07E0, 0x0000);  // Set color of text. First is the color of text and after is color of background
  tft.setTextSize(4);  // Set text size. Goes from 0 (the smallest) to 20 (very big)
  tft.println(string);  // Print a text or value

// We are going to write the Variable1 with a custom text, so you can see the issues:
  
  // Draw a black square in the background to "clear" the previous text:
  // This is because we are going to use a custom font, and that doesn't support brackground color.
  // We are basically printing our own background. This will cause flickering, though.
  tft.fillRect(0, 198, 75, 34, 0x0000);  // Draw filled rectangle (x,y,width,height,color)

// Start using a custom font:
  tft.setFont(&FreeSerif24pt7b); // Set a custom font
  tft.setTextSize(0);  // Set text size. We are using custom font so you should always set text size as 0

  // Write to the display the Variable1:
  tft.setCursor(0, 230);  // Set position (x,y)
  tft.setTextColor(0xF81F);  // Set color of text. We are using custom font so there is no background color supported
  tft.println(Variable1);  // Print a text or value

  // Stop using a custom font
  tft.setFont();  // Reset to standard font, to stop using any custom font previously set

}  // End of loop

http://forum.rcl-radio.ru/uploads/images/2025/03/79c8aaf6b9588e3b4687e203517d3cb7.jpg
http://forum.rcl-radio.ru/uploads/images/2025/03/ebcf43c82f61edde078ffc7e676ad512.jpg

I tested your program, it didn't show any results.
http://forum.rcl-radio.ru/uploads/images/2025/03/a0d4a146a4ca1eb09701578a4d69e8ca.jpg

233

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

I want to continue using this program, but it does not display on the screen.

// 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 <Wire.h> 
#include <TDA7419.h>           // https://github.com/liman324/TDA7419.git
#include <EEPROM.h>
#include <UTFT.h>              // http://rcl-radio.ru/wp-content/uploads/2019/06/UTFT.zip
#include <Encoder.h>           // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip 
#include <MsTimer2.h>          // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip 

TDA7419 tda;
Encoder myEnc(CLK_ENC, TD_ENC);
UTFT tft(TFT01_22SP, 8, 9, 12, 11, 10); // SDI (MOSI), SCK, CS, RESET, DC


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;
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);
  tft.InitLCD(1);
  tft.clrScr();
  tft.setFont(BigFont);
  tft.setColor(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<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&&menu_set==0){menu++;if(menu>3){menu=0;}times=millis();ss=1;eep=1;w1=1,w2=1,w3=1,w4=1;}
 if(digitalRead(SW_ENC)==LOW&&menu_set==1){menu0++;if(menu0>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&&menu_set==0&&ss==0){menu_set=1;menu=100;menu0=0;w10=1;w1=1;delay(200);}
 if(digitalRead(SET)==LOW&&menu_set==1){menu_set=0;menu=0;menu0=100;h6=1;w1=1;}
 }
 if(digitalRead(MUTE)==LOW&&mute==1){mute=0;menu=0;menu0=100;h6=1;w1=1;audio();delay(200);}
 if(digitalRead(MUTE)==LOW&&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.setColor(0xFFFF);}else{tft.setColor(0xfecd);}if(mute==1){tft.print("VOLUME", 5, 0);}if(mute==0){tft.print("MUTE  ", 5, 0);}}
 if(w2==1){w2=0; if(menu==1){tft.setColor(0xFFFF);}else{tft.setColor(0xfecd);}tft.print("TREBLE", 5, 15);}
 if(w3==1){w3=0; if(menu==2){tft.setColor(0xFFFF);}else{tft.setColor(0xfecd);}tft.print("MIDDLE", 5, 30);}
 if(w4==1){w4=0; if(menu==3){tft.setColor(0xFFFF);}else{tft.setColor(0xfecd);}tft.print("BASS", 5, 45);}

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

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

 if(st==1){st=0;
 tft.setColor(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.setColor(0xdfcf);
 tft.print("Gain", 165, 65);
 tft.setColor(0xffaf);
 tft.print("LF", 5, 84);
 tft.print("RF", 65, 84);
 tft.print("LT", 125, 84);
 tft.print("RT", 185, 84);
 tft.print("SUB", 245, 84);
 tft.print("Loudness Att", 5, 103);
 tft.print("Loudness Freq", 5, 118);
 tft.print("Treb Center", 5, 139);
 tft.print("Midd Center", 5, 156);
 tft.print("Bass Center", 5, 173);
 tft.print("SUB Freq", 5, 190);
 tft.print("Middle Q", 5, 207);
 tft.print("Bass Q", 5, 224);
 }

 
 if(h6==1||w10==1){w10=0;if(menu0==0){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(lf,40, 84);}
 if(h6==1||w11==1){w11=0;if(menu0==1){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(rf,100, 84);}
 if(h6==1||w12==1){w12=0;if(menu0==2){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(lt,160, 84);}
 if(h6==1||w13==1){w13=0;if(menu0==3){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(rt,220, 84);}
 if(h6==1||w14==1){w14=0;if(menu0==4){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(sab,300, 84);}
 if(h6==1||w15==1){w15=0;if(menu0==5){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}tft.printNumI(att_loun,240,103);}
 if(h6==1||w16==1){w16=0;if(menu0==6){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}
 switch(s_loun){
  case 0:tft.print(" FLAT ", 220, 118);break;
  case 1:tft.print(" 400Hz", 220, 118);break;
  case 2:tft.print(" 800Hz", 220, 118);break;
  case 3:tft.print("2400Hz", 220, 118);break;
  }}
 if(h6==1||w17==1){w17=0;if(menu0==7){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);} 
  switch(treb_c){
  case 0:tft.print("10.0kHz", 200, 139);break;
  case 1:tft.print("12.5kHz", 200, 139);break;
  case 2:tft.print("15.0kHz", 200, 139);break;
  case 3:tft.print("17.5kHz", 200, 139);break;
  }}
  if(h6==1||w18==1){w18=0;if(menu0==8){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}
  switch(mid_c){
  case 0:tft.print("0.5kHz", 210, 156);break;
  case 1:tft.print("1.0kHz", 210, 156);break;
  case 2:tft.print("1.5kHz", 210, 156);break;
  case 3:tft.print("2.5kHz", 210, 156);break;
  }}
  if(h6==1||w19==1){w19=0;if(menu0==9){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}
  switch(bass_c){
  case 0:tft.print("60 Hz", 220, 173);break;
  case 1:tft.print("80 Hz", 220, 173);break;
  case 2:tft.print("100Hz", 220, 173);break;
  case 3:tft.print("200Hz", 200, 173);break;
  }}
  if(h6==1||w20==1){w20=0;if(menu0==10){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);} 
  switch(sub_c){
  case 0:tft.print("FLAT ", 220, 190);break;
  case 1:tft.print("80 Hz", 220, 190);break;
  case 2:tft.print("120Hz", 220, 190);break;
  case 3:tft.print("160Hz", 220, 190);break;
  }}
  if(h6==1||w21==1){w21=0;if(menu0==11){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}
  switch(mid_q){
  case 0:tft.print("0.50", 220, 207);break;
  case 1:tft.print("0.75", 220, 207);break;
  case 2:tft.print("1.00", 220, 207);break;
  case 3:tft.print("1.25", 220, 207);break;
  }}
  if(h6==1||w22==1){w22=0;if(menu0==12){tft.setColor(0xFFFF);}else{tft.setColor(0xcdcd);}   
  switch(bass_q){
  case 0:tft.print("1.00", 220, 224);break;
  case 1:tft.print("1.25", 220, 224);break;
  case 2:tft.print("1.50", 220, 224);break;
  case 3:tft.print("2.00", 220, 224);break;
  }}
 if(h6==1){h6=0;} 
 if(menu0<100){menu=100;}
 
//// EEPROM
 if(millis()-times>3000 && 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>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}}
void vol_conf(){if(vol>80){vol=80;}if(vol<0){vol=0;}}
void treb_conf(){if(treb>15){treb=15;}if(treb<-15){treb=-15;}}
void mid_conf(){if(mid>15){mid=15;}if(mid<-15){mid=-15;}}
void bass_conf(){if(bass>15){bass=15;}if(bass<-15){bass=-15;}}
void in_conf(){if(in>2){in=0;}}
void gain_conf(){if(gain>9){gain=9;}if(gain<0){gain=0;}}
void lf_conf(){if(lf>9){lf=9;}if(lf<0){lf=0;}}
void rf_conf(){if(rf>9){rf=9;}if(rf<0){rf=0;}}
void lt_conf(){if(lt>9){lt=9;}if(lt<0){lt=0;}}
void rt_conf(){if(rt>9){rt=9;}if(rt<0){rt=0;}}
void sab_conf(){if(sab>9){sab=9;}if(sab<0){sab=0;}}
void att_loun_conf(){if(att_loun>9){att_loun=9;}if(att_loun<0){att_loun=0;}}
void s_loun_conf(){if(s_loun>3){s_loun=3;}if(s_loun<0){s_loun=0;}}
void treb_c_conf(){if(treb_c>3){treb_c=3;}if(treb_c<0){treb_c=0;}}
void mid_c_conf(){if(mid_c>3){mid_c=3;}if(mid_c<0){mid_c=0;}}
void bass_c_conf(){if(bass_c>3){bass_c=3;}if(bass_c<0){bass_c=0;}}
void sub_c_conf(){if(sub_c>3){sub_c=3;}if(sub_c<0){sub_c=0;}}
void mid_q_conf(){if(mid_q>3){mid_q=3;}if(mid_q<0){mid_q=0;}}
void bass_q_conf(){if(bass_q>3){bass_q=3;}if(bass_q<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);
}

http://forum.rcl-radio.ru/uploads/images/2025/03/c4466457ef95eccf25d308a3918470c4.jpg

234

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

Вы использовали эту схему

http://forum.rcl-radio.ru/uploads/images/2025/03/b66e0789c674e9bf4b1d9f5236e4073b.png

235

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

Тест - http://rcl-radio.ru/?p=61998

236

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

I have followed the instructions, but it still doesn't work. There is no display. I have reviewed the circuit connection as suggested.
http://forum.rcl-radio.ru/uploads/images/2025/03/997a547841fb66b339fba8bae79ad634.jpg

#include <UTFT.h> 
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 ( "Hello, World!" , CENTER, 0 ) ;  
  myGLCD. setColor ( VGA_BLUE ) ;  
  myGLCD. print( "Hello, World!" , CENTER, 36 ) ;  
  myGLCD. setColor ( VGA_GREEN ) ; 
  myGLCD. print ( "Hello, World!" , CENTER, 72 ) ;  
  myGLCD. setColor ( VGA_SILVER ) ; 
  myGLCD. print( "Hello, World!" , CENTER, 108 ) ;
 }
void loop( ) 
{ 
}

237

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

I don't know if the monitor I ordered from China. But it's v1.3. Will it be different? But I tested it with the program from what I posted. But the circuit connection will change. There will be a display screen.

238

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

Скачайте библиотеку с этого источника - http://rcl-radio.ru/wp-content/uploads/2019/06/UTFT.zip

// библиотека для работы с дисплеем
#include <UTFT.h>
// создаём объект класса 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("Hello, World!", CENTER, 0);
  // устанавливаем синий цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_BLUE);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 36);
  // устанавливаем зелёный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_GREEN);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 72);
  // устанавливаем серебряный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_SILVER);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 108);
}
void loop()
{
}

239

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

I found the code from the web and tested it but it doesn't work.

// библиотека для работы с дисплеем
#include <UTFT.h>
// создаём объект класса 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("Hello, World!", CENTER, 0);
  // устанавливаем синий цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_BLUE);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 36);
  // устанавливаем зелёный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_GREEN);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 72);
  // устанавливаем серебряный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_SILVER);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 108);
}
void loop()
{
}

240

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

Проверьте соответствие

8, 9, 12, 11, 10 === SDI (MOSI), SCK, CS, RESET, DC

241

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

I have tested as you suggested. Still the same. No screenshot.
I use this code to test.

// библиотека для работы с дисплеем
#include <UTFT.h>
// создаём объект класса 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("Hello, World!", CENTER, 0);
  // устанавливаем синий цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_BLUE);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 36);
  // устанавливаем зелёный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_GREEN);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 72);
  // устанавливаем серебряный цвет «чернил» для печати и рисования
  myGLCD.setColor(VGA_SILVER);
  // печатаем строку в указанной строке позиции
  myGLCD.print("Hello, World!", CENTER, 108);
}
void loop()
{
}

242

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

I have tested it many times until I got the code below. But I don't know if it can be used with the TDA7419 program.

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>

#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" 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'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("Hello! ST77xx TFT Test"));

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

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

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

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

  // OR use this initializer (uncomment) if using a 1.9" 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("Initialized"));

  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("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. ", 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("done");
  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 < tft.width(); x+=6) {
    tft.drawLine(0, 0, x, tft.height()-1, color);
    delay(0);
  }
  for (int16_t y=0; y < 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 < tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
    delay(0);
  }
  for (int16_t y=0; y < 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 < tft.width(); x+=6) {
    tft.drawLine(0, tft.height()-1, x, 0, color);
    delay(0);
  }
  for (int16_t y=0; y < 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 < tft.width(); x+=6) {
    tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
    delay(0);
  }
  for (int16_t y=0; y < 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 < tft.height(); y+=5) {
    tft.drawFastHLine(0, y, tft.width(), color1);
  }
  for (int16_t x=0; x < 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 < 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 > 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 < tft.width(); x+=radius*2) {
    for (int16_t y=radius; y < 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 < tft.width()+radius; x+=radius*2) {
    for (int16_t y=0; y < 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 <= 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 <= 4; t+=1) {
    int x = 0;
    int y = 0;
    int w = tft.width()-2;
    int h = tft.height()-2;
    for(i = 0 ; i <= 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("Hello World!");
  tft.setTextColor(ST77XX_YELLOW);
  tft.setTextSize(2);
  tft.println("Hello World!");
  tft.setTextColor(ST77XX_GREEN);
  tft.setTextSize(3);
  tft.println("Hello World!");
  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("Hello World!");
  tft.setTextSize(1);
  tft.setTextColor(ST77XX_GREEN);
  tft.print(p, 6);
  tft.println(" Want pi?");
  tft.println(" ");
  tft.print(8675309, HEX); // print 8,675,309 out in HEX!
  tft.println(" Print HEX!");
  tft.println(" ");
  tft.setTextColor(ST77XX_WHITE);
  tft.println("Sketch has been");
  tft.println("running for: ");
  tft.setTextColor(ST77XX_MAGENTA);
  tft.print(millis() / 1000);
  tft.setTextColor(ST77XX_WHITE);
  tft.print(" seconds.");
}

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);
}

http://forum.rcl-radio.ru/uploads/images/2025/03/9de059678e3d39284e954bc433bf69cf.jpg

243

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

Попробуйте поменять код на ST7789