#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include "Taskfun.h"
#include <MusicBuzzer.h>
// For the Adafruit shield, these are the default.
#define TFT_DC 9 // UNO+NANO= 9, ESP=2
#define TFT_CS 10 // UNO+NANO=10, ESP=15
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
#define WIDTH 320
#define HEIGHT 240
#define BUZZER_PIN 3
struct STAR {
float x;
float y;
float size;
float distance;
};
struct STAR stars[50];
const int starslen = sizeof(stars)/sizeof(stars[0]);
void generateStar(STAR& star) {
star.x = random(WIDTH);
star.y = random(HEIGHT);
star.size = random(5) / 10.0;
star.distance = random(100);
}
void generateStars() {
for(auto i = 0; i < starslen; ++i) {
generateStar(stars[i]);
}
}
void updateStar(STAR& star, float zoom) {
star.distance -= zoom;
if (star.distance < 0.1) {
generateStar(star);
} else {
star.x += zoom / star.distance * (star.x < WIDTH / 2) ? -1 : 1;
star.y += zoom / star.distance * (star.y < HEIGHT / 2) ? -1 : 1;
star.size = star.size + zoom / star.distance;
}
}
void drawStar(STAR& star, int16_t color) {
tft.fillCircle(star.x, star.y, star.size / 2, color);
}
void starZoom(float zoom) {
while(1) {
for(auto i = 0; i < starslen; ++i) {
auto& star = stars[i];
drawStar(star, 0);
updateStar(star, 1.2);
drawStar(star, 0xFFFF);
}
yield();
};
}
void starwarsSong(int) {
while(1) {
music.pinkpanther();
}
}
void setup() {
tft.begin();
tft.setRotation(1);
music.init(BUZZER_PIN);
generateStars();
setupTasks();
runTask(starwarsSong, 0, 640, 0);
runTask(starZoom, 1.2f, 640, 2);
}
void loop() {
yield();
}