#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#define TFT_DC 2
#define TFT_CS 15
#define TFT_SCLK 18
#define TFT_MOSI 23
Adafruit_ILI9341 *tft = NULL; // = Adafruit_ILI9341(TFT_CS, TFT_DC);
#define WIDTH 240
#define HEIGHT 320
#define CENTER_X (WIDTH / 2)
#define CENTER_Y (HEIGHT / 2)
#define RADIUS 100
#define CENTER_X 160
#define CENTER_Y 120
#define RADIUS 100
void drawDialGauge() {
tft->drawCircle(CENTER_X, CENTER_Y, RADIUS, ILI9341_WHITE);
// Draw the ticks
for (int i = 0; i < 360; i += 30) {
double angle = i * PI / 180;
int x1 = CENTER_X + (RADIUS - 10) * cos(angle);
int y1 = CENTER_Y + (RADIUS - 10) * sin(angle);
int x2 = CENTER_X + RADIUS * cos(angle);
int y2 = CENTER_Y + RADIUS * sin(angle);
tft->drawLine(x1, y1, x2, y2, ILI9341_WHITE);
}
}
void drawPointer(int angle) {
tft->fillCircle(CENTER_X, CENTER_Y, 5, ILI9341_RED); // Draw the center point
double pointerAngle = angle * PI / 180;
int pointerX = CENTER_X + (RADIUS - 20) * cos(pointerAngle);
int pointerY = CENTER_Y + (RADIUS - 20) * sin(pointerAngle);
tft->drawLine(CENTER_X, CENTER_Y, pointerX, pointerY, ILI9341_RED);
}
void drawFancyPointer(int angle) {
tft->fillCircle(CENTER_X, CENTER_Y, 5, ILI9341_RED); // Draw the center point
double pointerAngle = angle * PI / 180;
int pointerX = CENTER_X + (RADIUS - 20) * cos(pointerAngle);
int pointerY = CENTER_Y + (RADIUS - 20) * sin(pointerAngle);
// Draw a thicker line for the pointer
for (int i = -1; i <= 1; i++) {
tft->drawLine(CENTER_X + i, CENTER_Y, pointerX + i, pointerY, ILI9341_RED);
tft->drawLine(CENTER_X, CENTER_Y + i, pointerX, pointerY + i, ILI9341_RED);
}
// Add a decorative end to the pointer
tft->fillCircle(pointerX, pointerY, 3, ILI9341_YELLOW);
}
void eraseFancyPointer(int angle) {
tft->fillCircle(CENTER_X, CENTER_Y, 5, ILI9341_BLACK); // Draw the center point
double pointerAngle = angle * PI / 180;
int pointerX = CENTER_X + (RADIUS - 20) * cos(pointerAngle);
int pointerY = CENTER_Y + (RADIUS - 20) * sin(pointerAngle);
// Draw a thicker line for the pointer
for (int i = -1; i <= 1; i++) {
tft->drawLine(CENTER_X + i, CENTER_Y, pointerX + i, pointerY, ILI9341_BLACK);
tft->drawLine(CENTER_X, CENTER_Y + i, pointerX, pointerY + i, ILI9341_BLACK);
}
// Add a decorative end to the pointer
tft->fillCircle(pointerX, pointerY, 3, ILI9341_BLACK);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32-S3!");
SPIClass *spi = new SPIClass(HSPI);
spi->begin(TFT_SCLK, -1, TFT_MOSI, TFT_CS);
tft = new Adafruit_ILI9341(spi, TFT_CS, TFT_DC);
// tft->setSPISpeed(80000000);
// tft->init(WIDTH, HEIGHT, SPI_MODE0);
tft->begin(80000000);
tft->setRotation(1);
tft->fillScreen(ILI9341_BLACK);
drawDialGauge();
}
void loop() {
static int point = 0;
// Update the pointer angle as needed
//drawPointer(point); // Example angle
drawFancyPointer(point);
delay(1);
eraseFancyPointer(point);
point++;
if (point > 359)
point = 0;
}