#include "SPI.h"
#include "TFT_eSPI.h"
#include "User_Setup.h"
TFT_eSPI tft = TFT_eSPI();
TFT_eSprite sunFrame = TFT_eSprite(&tft); // Bufor dla słońca
TFT_eSprite moonFrame = TFT_eSprite(&tft); // Bufor dla księżyca
TFT_eSprite sunSpr = TFT_eSprite(&tft);
TFT_eSprite moonSpr = TFT_eSprite(&tft);
int sunX = 1, moonX = 1;
int r = 30;
int frameW = 318;
// Osobne wysokości buforów
int sunFrameH = 60; // Tylko na słońce
int moonFrameH = 60; // Tylko na księżyc
// Osobne pozycje na ekranie
int sunVerticalPos = 20; // Słońce wyżej
int moonVerticalPos = 100; // Księżyc niżej
void setup() {
tft.init();
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
// RAMKA całego ekranu
tft.drawRect(0, 0, 320, 240, TFT_BLUE);
// NAPISY
tft.setTextColor(TFT_GREEN);
tft.setTextFont(2);
tft.drawString("SUN", 140, 2); // Nad słońcem
tft.drawString("MOON", 135, 82); // nad księżycem
// BUFORY animacji
sunFrame.setColorDepth(16);
sunFrame.createSprite(frameW, sunFrameH);
moonFrame.setColorDepth(16);
moonFrame.createSprite(frameW, moonFrameH);
// Sprite słońca
sunSpr.setColorDepth(16);
sunSpr.createSprite(r * 2, r * 2);
sunSpr.fillSprite(TFT_BLACK);
sunSpr.fillCircle(r, r, r, TFT_YELLOW);
// Sprite księżyca
moonSpr.setColorDepth(16);
moonSpr.createSprite(r * 2, r * 2);
moonSpr.fillSprite(TFT_BLACK);
moonSpr.fillCircle(r, r, r, TFT_LIGHTGREY);
}
void loop() {
// Czyścimy bufory
sunFrame.fillSprite(TFT_BLACK);
moonFrame.fillSprite(TFT_BLACK);
// SŁOŃCE - rysujemy 2 kopie (główną i zawiniętą)
sunSpr.pushToSprite(&sunFrame, sunX, 0, TFT_BLACK);
sunSpr.pushToSprite(&sunFrame, sunX - frameW, 0, TFT_BLACK);
// KSIĘŻYC - to samo
moonSpr.pushToSprite(&moonFrame, moonX, 0, TFT_BLACK);
moonSpr.pushToSprite(&moonFrame, moonX - frameW, 0, TFT_BLACK);
// Wyświetlamy bufory
sunFrame.pushSprite(1, sunVerticalPos);
moonFrame.pushSprite(1, moonVerticalPos);
// Animacja - ciągłe przesuwanie
sunX += 2;
moonX += 1;
// Reset pozycji (żeby nie przekraczało zakresu)
if (sunX > frameW) sunX = 0;
if (moonX > frameW) moonX = 0;
delay(50);
}