Рома
28.Февраль.2025 16:47:47
1
Привет!
Имеется дисплей 320*480,при попытке изменить размер фонового спрайта с
background.createSprite(320,170);
на
background.createSprite(480,320); \\(настройка под мой экран)
картинка ,задуманная автором пропадает, остаётся тёмный фон.
Может быть кто-нибудь подскажет в чём может быть дело ?
Вот код автора:
#include <TFT_eSPI.h>
#include "arrow.h"
#include "city.h"
TFT_eSPI tft = TFT_eSPI();
TFT_eSprite arrowSprite= TFT_eSprite(&tft);
TFT_eSprite background= TFT_eSprite(&tft);
TFT_eSprite txtSprite= TFT_eSprite(&tft);
int x=20;
void setup() {
tft.init();
tft.setRotation(1);
tft.setSwapBytes(true);
background.createSprite(320,170);
background.setSwapBytes(true);
arrowSprite.createSprite(96,96);
txtSprite.createSprite(80,80);
txtSprite.setTextColor(TFT_WHITE,TFT_BLACK);
//arrowSprite.setSwapBytes(true);
}
void loop() {
background.pushImage(0,0,320,170,city);
txtSprite.fillSprite(TFT_BLACK);
txtSprite.drawString(String(x),0,0,6);
arrowSprite.pushImage(0,0,96,96,arrow);
arrowSprite.pushToSprite(&background,x,40,TFT_BLACK);
txtSprite.pushToSprite(&background,200,30,TFT_BLACK);
background.pushSprite(0,0);
x++;
if(x>330)
x=-100;
}
Вот видео автора кода:
https://www.youtube.com/watch?v=U4jOFLFNZBI&t=1040s
ua6em
28.Февраль.2025 17:31:52
2
у меня не пропадает, всё работает
#include <TFT_eSPI.h>
#include "arrow.h"
#include "city.h"
#define HSPI_MISO 46 // LCD - MISO
#define HSPI_MOSI 45 // LCD - MOSI
#define HSPI_SCLK 40 // LCD - SCL
#define HSPI_RST 39 // LCD - RST
#define HSPI_SS 42 // LCD - CS
#define HSPI_RS 41 // LCD - RS
#define IM0 47 // Установка режима дисплея IM2/IM1/IM0 = 111 (SPI)
#define IM1 48
#define LCD_LED 13
TFT_eSPI tft = TFT_eSPI();
TFT_eSprite arrowSprite= TFT_eSprite(&tft);
TFT_eSprite background= TFT_eSprite(&tft);
TFT_eSprite txtSprite= TFT_eSprite(&tft);
int x=20;
void setup() {
pinMode(IM0, OUTPUT);
pinMode(IM1, OUTPUT);
pinMode(LCD_LED, OUTPUT);
//digitalWrite(IM0, LOW); // для GC9307, GC9A01
#ifndef GC9307
digitalWrite(IM0, HIGH); //ST7796 320x480
#else
digitalWrite(IM0, LOW); //GC9307 240x320
#endif
digitalWrite(IM1, HIGH);
analogWrite(LCD_LED, 1022);
tft.init();
tft.setRotation(1);
tft.setSwapBytes(true);
background.createSprite(480,320);
background.setSwapBytes(true);
arrowSprite.createSprite(96,96);
txtSprite.createSprite(80,80);
txtSprite.setTextColor(TFT_WHITE,TFT_BLACK);
//arrowSprite.setSwapBytes(true);
}
void loop() {
background.pushImage(0,0,320,170,city);
txtSprite.fillSprite(TFT_BLACK);
txtSprite.drawString(String(x),0,0,6);
arrowSprite.pushImage(0,0,96,96,arrow);
arrowSprite.pushToSprite(&background,x,40,TFT_BLACK);
txtSprite.pushToSprite(&background,200,30,TFT_BLACK);
background.pushSprite(0,0);
x++;
if(x>330)
x=-100;
}
Рома
01.Март.2025 04:32:02
3
Странно, попробую ещё раз
ua6em
01.Март.2025 04:38:39
4
скетч, что работает, я привёл
1 лайк
MMM
01.Март.2025 07:49:23
5
Рома:
Вот код автора:
Вот нафига вы код автора выложили. У вас разве с ним проблемы? Код автора работает.
Если у вас проблемы с вашим кодом, этот код и надо показывать.
Рома
01.Март.2025 11:20:47
6
Он работает до момента изменения размера спрайта background/
ua6em
01.Март.2025 11:37:58
7
у меня работает, могу фото скинуть если сомневаешься, что за монитор?
Рома
01.Март.2025 11:44:39
8
Конечно, верю, сейчас пытаюсь найти причину того, что я сделал не так…
MMM
01.Март.2025 11:46:37
9
В этом коде размер спрайта указан в нескольких местах. Вы во всех поменяли?
Повторяю, если хотите помощи - показывайте свой код. Иначе и спрашивать не стоило.
Рома
01.Март.2025 12:03:42
10
Я использую код автора,изменения производил только тут:
background.createSprite(320,170);
background.pushImage(0,0,320,170,city);
на
background.createSprite(480,320);
background.pushImage(0,0,480,320,city);
Проблема возникает после изменения этого кода.
Вот мой код:
#include <TFT_eSPI.h>
#include "arrow.h"
#include "city.h"
TFT_eSPI tft = TFT_eSPI();
TFT_eSprite arrowSprite= TFT_eSprite(&tft);
TFT_eSprite background= TFT_eSprite(&tft);
TFT_eSprite txtSprite= TFT_eSprite(&tft);
int x=20;
void setup() {
tft.init();
tft.setRotation(1);
tft.setSwapBytes(true);
background.createSprite(480,320);
background.setSwapBytes(true);
arrowSprite.createSprite(96,96);
txtSprite.createSprite(80,80);
txtSprite.setTextColor(TFT_WHITE,TFT_BLACK);
//arrowSprite.setSwapBytes(true);
}
void loop() {
background.pushImage(0,0,480,320,city);
txtSprite.fillSprite(TFT_BLACK);
txtSprite.drawString(String(x),0,0,6);
arrowSprite.pushImage(0,0,96,96,arrow);
arrowSprite.pushToSprite(&background,x,40,TFT_BLACK);
txtSprite.pushToSprite(&background,200,30,TFT_BLACK);
background.pushSprite(0,0);
x++;
if(x>330)
x=-100;
}
ua6em
01.Март.2025 12:09:33
12
Рома:
background.pushImage(0,0,480,320,city);
с какого такого перепугу?
У тебя спрайт имеет формат 320 на 170
оставь как было 26 строку!!!
Рома
01.Март.2025 12:12:47
13
Да вроде нет, спрайт для картинки 3480*320.
ua6em
01.Март.2025 12:15:37
14
Рома:
Да вроде нет
да вроде Да, ты преамбулу глянь!!!
// Generated by : ImageConverter 565 Online
// Generated from : SPR.jpg
// Time generated : Sun, 30 Oct 22 10:54:48 +0100 (Server timezone: CET)
// Image Size : 320x170 pixels
// Memory usage : 108800 bytes
Рома
01.Март.2025 12:18:33
15
ЁПТ,спасибо.
Тогда верну размер картинке, ща поправлю и текст( координату ) попробую выводить за предел этой картинки
Рома
01.Март.2025 12:24:40
16
Хотел бы задать второй вопрос до кучи)
Почем-то не выводится координата из этого кода:
#include <TFT_eSPI.h> // Hardware-specific library
TFT_eSPI tft = TFT_eSPI();
TFT_eSprite img= TFT_eSprite(&tft);
int x =0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
tft.init();
tft.setRotation(1);
tft.setSwapBytes(true);
tft.fillScreen(TFT_BLACK);
//img.createSprite(480,320);
}
void loop() {
// Установить цвет фона черным и очистить старую позицию
tft.fillCircle(x, 36, 30, TFT_BLACK);
x = x + 1;
if (x > 480) {
x = 0;
}
tft.fillCircle(x, 36, 30, TFT_RED);
// Очистить область, где будет текст
tft.fillRect(18, 98, 100, 100, TFT_BLACK);
// Установить шрифт перед выводом
tft.setFreeFont(NULL); // Включить стандартный шрифт (или выберите свой шрифт)
// Отобразить строку
tft.drawString(String(x), 20, 100, 5);
Serial.println(x);
}
ua6em
01.Март.2025 12:38:58
17
у нас тут по дисплеями есть Гуру - @lilik
1 лайк