/*
Forum: https://forum.arduino.cc/t/adafruit-320x240-mit-teensy-4-0-flickering/1350338
Wokwi: https://wokwi.com/projects/422059759297301505
ec2021
Draw Bars/Pointers with minimum erasure effort
Classes with Template
*/
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include "TemplateGraphicClass.h"
#define TFT_DC 9
#define TFT_CS 10
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
constexpr float Radius = 100.0;
unsigned long lastTime = 0;
int Angle = 180;
int AngleDx = 10;
int value = 1;
int delta = 1;
PointerClass<Adafruit_ILI9341> pointerA(tft), pointerB(tft), pointerC(tft), pointerD(tft);
BarClass<Adafruit_ILI9341> barA(tft), barB(tft), barC(tft), barD(tft);
void setup() {
Serial.begin(115200);
Serial.println("Graphics Example");
tft.begin();
pointerA.setXYR(120, 160, 80);
pointerB.setXYR(120, 160, 60);
pointerC.setXYR(120, 160, 50);
pointerD.setXYR(120, 160, 40);
pointerA.setBackColor(ILI9341_BLACK);
barA.setXYWD(200, 20, 40, 0);
barA.setBackColor(ILI9341_GREEN);
barB.setXYWD( 40, 260, 30, 1);
barC.setXYWD( 20, 120, 20, 2);
barD.setXYWD(160, 300, 10, 3);
clearScreen();
}
void loop(void) {
if (millis() - lastTime > 100) {
lastTime = millis();
handlePointers();
handleBars();
}
}
void clearScreen() {
tft.fillScreen(ILI9341_BLACK);
}
void handlePointers() {
pointerA.draw(Angle, ILI9341_YELLOW);
pointerB.draw(90 - Angle, ILI9341_GREEN);
pointerC.draw(Angle + 45, ILI9341_YELLOW);
pointerD.draw(180 - Angle, ILI9341_GREEN);
Angle += AngleDx;
if ((Angle < 0) || (Angle > 180)) {
AngleDx = -AngleDx;
}
}
void handleBars() {
barA.draw(value * 10, ILI9341_MAGENTA);
barB.draw(value * 10, ILI9341_RED);
barC.draw(value * 10, ILI9341_BLUE);
barD.draw(value * 10, ILI9341_GREEN);
value += delta;
if (value > 10 || value < 2) {
delta = -delta;
}
}