#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <SPI.h>
#define TFT_CLK 18 // CLK pin
#define TFT_MISO 19 // MISO pin
#define TFT_MOSI 23 // MOSI pin
#define TFT_CS 15 // CS pin
#define TFT_RST 2 // Reset pin
#define TFT_DC 4 // Data/Command pin
#define CLOCK_RADIUS 60
#define HOUR_HAND_LENGTH 40
#define MINUTE_HAND_LENGTH 55
#define SECOND_HAND_LENGTH 57
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST, TFT_MOSI, TFT_CLK, TFT_MISO);
void drawClockHand(int centerX, int centerY, int length, float angle, uint16_t color) {
int handX = centerX + length * sin(angle * PI / 180);
int handY = centerY - length * cos(angle * PI / 180);
tft.drawLine(centerX, centerY, handX, handY, color);
}
void setup() {
Serial.begin(115200);
SPI.begin(TFT_CLK, TFT_MISO, TFT_MOSI, TFT_CS);
tft.begin();
tft.fillScreen(ILI9341_CYAN);
tft.setTextColor(ILI9341_WHITE);
}
void loop() {
int centerX = tft.width() / 2;
int centerY = tft.height() / 2;
tft.fillCircle(centerX, centerY, SECOND_HAND_LENGTH, ILI9341_CYAN);
tft.fillCircle(centerX, centerY, MINUTE_HAND_LENGTH, ILI9341_CYAN);
tft.fillCircle(centerX, centerY, HOUR_HAND_LENGTH, ILI9341_CYAN);
unsigned long currentTime = millis();
unsigned long seconds = (currentTime / 1000) % 60;
unsigned long minutes = (currentTime / (1000 * 60)) % 60;
unsigned long hours = (currentTime / (1000 * 60 * 60)) % 12;
float hourAngle = map(hours, 0, 12, 0, 360) + (30 * (minutes / 60.0));
float minuteAngle = map(minutes, 0, 60, 0, 360) + (6 * (seconds / 60.0));
float secondAngle = map(seconds, 0, 60, 0, 360);
drawClockHand(centerX, centerY, SECOND_HAND_LENGTH, secondAngle, ILI9341_RED);
drawClockHand(centerX, centerY, MINUTE_HAND_LENGTH, minuteAngle, ILI9341_WHITE);
drawClockHand(centerX, centerY, HOUR_HAND_LENGTH, hourAngle, ILI9341_WHITE);
tft.drawCircle(centerX, centerY, CLOCK_RADIUS, ILI9341_WHITE);
tft.setCursor(centerX - 30, centerY + CLOCK_RADIUS + 10);
tft.setTextColor(ILI9341_BLACK);
tft.print(" ");
tft.setCursor(centerX - 30, centerY + CLOCK_RADIUS + 10);
tft.setTextColor(ILI9341_WHITE);
tft.print(String(hours) + ":" + String(minutes) + ":" + String(seconds));
delay(1000);
}