#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#define TFT_DC 6
#define TFT_CS 10
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
#define F ILI9341_BLACK
#define W ILI9341_WHITE
#define R ILI9341_RED
#define Y ILI9341_YELLOW
#define A 0xFB36
#define SPRITE_W 10
#define SPRITE_H 5
PROGMEM const uint16_t sprite1[] = {
W,W,W,W,W,W,W,W,W,W,
W,F,F,F,F,F,F,F,F,W,
W,F,R,R,R,R,R,R,F,W,
W,F,F,F,F,F,F,F,F,W,
W,W,W,W,W,W,W,W,W,W,
};
void drawOneSprite(int x, int y, uint16_t* spr, int width, int height) {
int length=width*height;
tft.startWrite();
tft.setAddrWindow(x,y,width,height);
for (int n=0; n<length; n++) {
tft.SPI_WRITE16( pgm_read_word( &spr[n] ) );
}
tft.endWrite();
}
void clearSprite(int x, int y, int width, int height, uint16_t fon){
tft.startWrite();
tft.setAddrWindow(x,y,width,height);
int length=width*height;
for (int n=0; n<length; n++) {
tft.SPI_WRITE16( fon );
}
tft.endWrite();
}
struct str_sprite { // структура для інформації про кожен спрайт
int x;
int y;
int w;
int h;
};
#define CNT_SPRITES 10
str_sprite mas[ CNT_SPRITES ]; // масив структур кожного спрайта
void setup() {
tft.begin();
tft.setTextColor( ILI9341_RED );
tft.setRotation(1);
tft.println("Hi!");
int xn = 10;
int yn = 5;
for( int i=0; i<CNT_SPRITES; i++) {
mas[i].x = xn + i * 12;
mas[i].y = yn + i * 10;
mas[i].w = SPRITE_W;
mas[i].h = SPRITE_H;
drawOneSprite(mas[i].x, mas[i].y, sprite1, mas[i].w, mas[i].h);
}
}
void move_sprite1(){
for( int i=0; i<CNT_SPRITES; i++){
clearSprite(mas[i].x, mas[i].y, mas[i].w, mas[i].h, F );
mas[i].x = mas[i].x + random(11)-5;
mas[i].y = mas[i].y + random(3)-1;
drawOneSprite(mas[i].x, mas[i].y, sprite1, mas[i].w, mas[i].h);
}
}
void loop() {
move_sprite1();
delay(50);
}