/*
Forum: https://forum.arduino.cc/t/displaying-rgb-bitmap-on-tft-from-c-file/1191496
Wokwi: https://wokwi.com/projects/382120404275155969
*/
#include "asciiGraphs.h"
// Single sprites created from ASCII arrays
asciiImageStruct img1 {asciiImage1};
asciiImageStruct img2 {asciiImage2};
asciiImageStruct img3 {asciiImage1};
asciiImageStruct img4 {asciiImage1};
// An array of sprites
constexpr int noOfSprites {3};
asciiImageStruct sprite[noOfSprites] {
{asciiImage1},
{asciiImage1},
{asciiImage1}
};
uint16_t xColors[noOfSprites] {
ILI9341_YELLOW,
ILI9341_ORANGE,
ILI9341_PINK
};
void setup() {
Serial.begin(115200);
tft.begin();
tft.setRotation(1);
img1.init();
img2.init();
img3.init();
img4.init();
// Single sprites prepared for static drawing
int xCenter = (tft.width() - noOfCols) / 2;
img2.setXYandStepAndDelay(xCenter, 200, 0, 0);
img2.draw();
img2.setXY(xCenter - noOfCols, 200);
img2.xColor = ILI9341_RED;
img2.draw();
img2.setXY(xCenter + noOfCols, 200);
img2.xColor = ILI9341_GREEN;
img2.draw();
img2.setXY(xCenter - 2 * noOfCols, 200);
img2.xColor = ILI9341_CYAN;
img2.draw();
img2.setXY(xCenter + 2 * noOfCols, 200);
img2.xColor = ILI9341_PURPLE;
img2.draw();
img4.setXYandStepAndDelay(xCenter + 4 * noOfCols, 200, -1, 0); //step < 0 -> Sprite is drawn right to left
img4.xColor = ILI9341_CYAN;
img4.oColor = ILI9341_BLUE;
img4.draw();
img4.setXYandStepAndDelay(xCenter - 4 * noOfCols, 200, 0, 0); //step >= 0 -> Sprite is drawn left to right
img4.xColor = ILI9341_MAGENTA;
img4.oColor = ILI9341_DARKGREY;
img4.draw();
// From here single sprites prepared for moving
img4.setXYandStepAndDelay(xCenter, 80, -4, 10);
img4.xColor = ILI9341_CYAN;
img4.oColor = ILI9341_BLUE;
img1.setXYandStepAndDelay(0, 120, 4, 10);
img3.setXYandStepAndDelay(tft.width() - 32, 160, -4, 10);
img3.xColor = ILI9341_GREEN;
img3.oColor = ILI9341_GREEN;
// Array of sprites prepared for moving
for (int i = 0; i < noOfSprites; i++) {
sprite[i].init();
sprite[i].setXYandStepAndDelay(i * noOfCols, i * (noOfRows + 16), 2 + i * 2, 10);
sprite[i].xColor = xColors[i];
}
}
void loop() {
img1.move();
img3.move();
img4.move();
for (int i = 0; i < noOfSprites; i++) {
sprite[i].move();
}
checkTurning();
}
void checkTurning() {
if (img1.isTurning) {
Serial.println("img1 has turned");
changeColor();
}
if (img3.isTurning) {
Serial.println("img3 has turned");
}
if (img4.isTurning) {
Serial.println("img4 has turned");
}
for (int i = 0; i < noOfSprites; i++) {
if (sprite[i].isTurning) {
Serial.print("Sprite ");
Serial.print(i + 1);
Serial.println(" has turned");
}
}
}
void changeColor() {
if (img1.xColor == ILI9341_BLUE) {
img1.xColor = ILI9341_RED;
img1.oColor = ILI9341_BLUE;
} else {
img1.xColor = ILI9341_BLUE;
img1.oColor = ILI9341_RED;
}
}