TFT_eSPI и Sprite

Привет!
Имеется дисплей 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

у меня не пропадает, всё работает

#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;

}

Странно, попробую ещё раз

скетч, что работает, я привёл

1 лайк

Вот нафига вы код автора выложили. У вас разве с ним проблемы? Код автора работает.
Если у вас проблемы с вашим кодом, этот код и надо показывать.

Он работает до момента изменения размера спрайта background/

у меня работает, могу фото скинуть если сомневаешься, что за монитор?

Конечно, верю, сейчас пытаюсь найти причину того, что я сделал не так…

В этом коде размер спрайта указан в нескольких местах. Вы во всех поменяли?

Повторяю, если хотите помощи - показывайте свой код. Иначе и спрашивать не стоило.

Я использую код автора,изменения производил только тут:

 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;

}

3,5`` iLI9488

с какого такого перепугу?
У тебя спрайт имеет формат 320 на 170
оставь как было 26 строку!!!

Да вроде нет, спрайт для картинки 3480*320.

да вроде Да, ты преамбулу глянь!!!

// 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

ЁПТ,спасибо.
Тогда верну размер картинке, ща поправлю и текст( координату ) попробую выводить за предел этой картинки

Хотел бы задать второй вопрос до кучи)
Почем-то не выводится координата из этого кода:

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

у нас тут по дисплеями есть Гуру - @lilik

1 лайк