ARDUINO Проблема с прошивкой Arduino UNO для TFT

NovinTutor

✩✩✩✩✩✩✩
19 Июл 2025
10
0
Загрузил программу для работы с TFT-дисплеем на Arduino UNO, загрузилось всё нормально. Но при запуске программы вместо нормального исполнения кода дуина выводит в COM-порт какую-то кашу, состоящую из квадратов, означающие несуществующие символы которые я ввести сюда не смог, т.к. они превращаются в пробелы, и рандомных символов. Объясните пожалуйста, в чём может быть проблема?
код, загруженный в дуину:
C++:
#include <UTFT.h>                                    
extern uint8_t SmallFont[];                          
extern uint8_t BigFont[];                            
extern uint8_t SevenSegNumFont[];                    
UTFT myGLCD(ILI9341_16,5,4,8,7,6);
void setup()
{
  myGLCD.InitLCD();                                  
}
void loop()
{

  myGLCD.clrScr();                                    
  myGLCD.setFont(SmallFont);                          
  myGLCD.setColor(VGA_WHITE);                        
  myGLCD.print("xyz | SmallFont", CENTER, 50);        
  myGLCD.setFont(BigFont);                            
  myGLCD.setColor(VGA_BLUE);                          
  myGLCD.print("BigFont", CENTER, 100);              
  myGLCD.print("numbers:", CENTER, 115);              
  myGLCD.setFont(SevenSegNumFont);                    
  myGLCD.setColor(VGA_FUCHSIA);                      
  myGLCD.print("1234567890", CENTER, 150);            
  delay(20000);
}
 
Изменено:

NovinTutor

✩✩✩✩✩✩✩
19 Июл 2025
10
0
у вас в коде вообще нет вывода в КОМ-порт, что вы там ожидаете увидеть?
я ожидаю что ничего выводить не будет, т.к. и не должно, а он выводит как раз таки эту кашу из рандомных символов
вместо нормального исполнения кода дуина выводит в COM-порт какую-то кашу
то есть сам код и не запускается

С микроконтроллером всё норм т.к. загрузил для проверки пример "Blink"
 
Изменено:

Bruzzer

★★★★✩✩✩
23 Май 2020
666
202
Значит вы неправильно указали тип дисплея. SPI и 16-ти битная шина это совсем разные вещи. Посмотрите примеры, как подключают ваш дисплей с SPI. Примеров в инете много.
 

NovinTutor

✩✩✩✩✩✩✩
19 Июл 2025
10
0
ААААА... спасибо, благодаря вам перепроверил дисплей и понял, что надо было указать TFT01_18SP

Но теперь компилятор ругается:
Ошибка:
Compilation error: 'TFT01_18SP' was not declared in this scope
 

Bruzzer

★★★★✩✩✩
23 Май 2020
666
202
@NovinTutor,
Вы действуете методом тыка?

Есть разные версии библиотеки UTFT, в той которая выложена на амперке, этот тип есть, но он не для ILI9341
В версии с амперки надо выбирать TFT01_24SP (или TFT01_22SP )
Кусок кода из UTFT.h "версии с амперки"
#define TFT01_18SP 24 // ST7735S (Serial 5Pin)
#define TFT01_22SP 25 // ILI9341 (Serial 5Pin)
#define TFT01_24SP 25 // ILI9341 (Serial 5Pin)
#define TFT22SHLD 25 // ILI9341 (Serial 5Pin)

В вашей версии - возможно надо выбирать ILI9341_S5P
Кусок кода из UTFT.h "новой версии"
#define ILI9341_S5P 25
 

NovinTutor

✩✩✩✩✩✩✩
19 Июл 2025
10
0
загрузить скетч получилось, но графика из кода так и не отобразилась. правильный дисплей установил, буду разбираться

Дисплей имеет диагональ 1.8", считаю что надо ставить TFT01_18SP
отредактировано: и даже так не работаeт
 

NovinTutor

✩✩✩✩✩✩✩
19 Июл 2025
10
0
Схему фотографировать не могу, могу дать текстом соединения (не пинайте, я контакты в коде переназначил, всё правильно)
TFT-------------UNO
LED---POT---+5V
SCK------------D13
SDA------------D11
A0-----------------D8
RST---------------RX
CS(SS)--------D10
и питание

и новый код:
C++:
#include <UTFT.h>                                     
extern uint8_t SmallFont[];                           
extern uint8_t BigFont[];                             
extern uint8_t SevenSegNumFont[];   
#define debug //debug, можно закомментировать
#ifdef debug
  #define vLog(x) Serial.println(x)
#else
  #define vLog(x)
#endif                 
void setup()
{
  Serial.begin(9600);
  myGLCD.InitLCD(); 
  vLog("Display initialized!");                                 
}
void loop()
{

  myGLCD.clrScr();                              vLog("Screen cleared!");                                 
  myGLCD.setFont(SmallFont);                    vLog("Small font setted!");                         
  myGLCD.setColor(VGA_WHITE);                   vLog("White color setted!");   
  myGLCD.print("xyz | SmallFont", CENTER, 50);  vLog("Text wrote!");       
  myGLCD.setFont(BigFont);                      vLog("Big font setted!");       
  myGLCD.setColor(VGA_BLUE);                    vLog("Blue color setted!");       
  myGLCD.print("BigFont", CENTER, 100);         vLog("Text wrote!");       
  myGLCD.print("numbers:", CENTER, 115);        vLog("Text wrote!");       
  myGLCD.setFont(SevenSegNumFont);              vLog("Sevenseg font setted!");       
  myGLCD.setColor(VGA_FUCHSIA);                 vLog("Color setted!");     
  myGLCD.print("1234567890", CENTER, 150);      vLog("Text wrote!");       
  delay(20000);
}
Использован vLog для отладки
теперь все сообщения вывдит, но графики на экране нету

пока думал библиотеку свою написал
 

bort707

★★★★★★✩
21 Сен 2020
3,251
946
Этот код не должен даже компилироваться, не то что работать. Где инициализация обьекта дисплея? Где в коде вы переназначили пины?

Кроме того, подключение RST дисплея к пину RX - это ошибка, так работать не будет.
 
Изменено:

NovinTutor

✩✩✩✩✩✩✩
19 Июл 2025
10
0
В исходном коде иницилизация была, а тут я случайно снёс её вместе с ненужными комментариями

норм код:
#include <UTFT.h>                                    
extern uint8_t SmallFont[];                          
extern uint8_t BigFont[];                            
extern uint8_t SevenSegNumFont[];  
#define debug //debug
#ifdef debug
  #define vLog(x) Serial.println(x)
#else
  #define vLog(x)
#endif
UTFT myGLCD(TFT01_24SP,11,13,10,8,5);                      //1,8  TFT  (128x160 chip ST7735S)
void setup()
{
  Serial.begin(9600);
  myGLCD.InitLCD();
  vLog("Display initialized!");                                
}
void loop()
{
  myGLCD.clrScr();                              vLog("Screen cleared!");                                
  myGLCD.setFont(SmallFont);                    vLog("Small font setted!");                        
  myGLCD.setColor(VGA_WHITE);                   vLog("White color setted!");  
  myGLCD.print("xyz | SmallFont", CENTER, 50);  vLog("Text wrote!");      
  myGLCD.setFont(BigFont);                      vLog("Big font setted!");      
  myGLCD.setColor(VGA_BLUE);                    vLog("Blue color setted!");      
  myGLCD.print("BigFont", CENTER, 100);         vLog("Text wrote!");      
  myGLCD.print("numbers:", CENTER, 115);        vLog("Text wrote!");      
  myGLCD.setFont(SevenSegNumFont);              vLog("Sevenseg font setted!");      
  myGLCD.setColor(VGA_FUCHSIA);                 vLog("Color setted!");    
  myGLCD.print("1234567890", CENTER, 150);      vLog("Text wrote!");      
  delay(20000);
}
в таком случае RX можно заменить на 5
 

Bruzzer

★★★★✩✩✩
23 Май 2020
666
202
чет мне как то странно, что человек способный выложить на github свою "библиотеку" (ее качество здесь не обсуждаю), не может найти примеры подключения своего экрана и его характеристики. Инфа в инете есть, и частенько говорится, что модулю нужны 3,3 В сигналы.
(Говорят есть модули со встроенными преобразователями уровней, например оригинальный Adafruit).
Так что сначала наверно надо определиться с уровнями сигналов.

Для библиотеки UTFT есть разные варианты инициализации см. UTFT.h
#define TFT01_18SP 24 // ST7735S (Serial 5Pin)
#define TFT18SHLD 31 // ST7735 (Serial 5Pin) Alternative Init
В ссылке ниже используют второй вариант (правильно это или нет не знаю)

Есть библиотека Adafruit-ST7735 со встроенными примерами.

Мне собственно было интересно, откуда может появиться мусор по COM порту. Я свой интерес удовлетворил. Модуля такого (никакого) не имею. Отключаюсь от дальнейшего обсуждения.
 

NovinTutor

✩✩✩✩✩✩✩
19 Июл 2025
10
0
смотрел в интернете, видимо нужно замкнуть перемычку J1
сегодня вечером спаяю контакты на ней
 

Bruzzer

★★★★✩✩✩
23 Май 2020
666
202
@NovinTutor,
Продолжаете действовать методом тыка?
> нужно замкнуть перемычку J1
Зачем это нужно? К каким последствиям может привести?

Если цель изучить программирование - то может быть стоит начать с симуляторов? Например wokwi.com Если wokwi.com сильно загружен, и не компилирует, то можно компилировать у себя на ПК, и загружать пошивку в wokwi.com.

Если делаете какое то устройство, то найдите похожий готовый проект с подробными объяснениями. И дополнительно, изучайте основы схемотехники.