#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <math.h> // For trigonometric functions
#include <TimeLib.h> // Arduino Time library for timekeeping
#define TFT_CS 10
#define TFT_RST 9 // Or set to -1 and connect to Arduino RESET pin
#define TFT_DC 8
#define TFT_MOSI 11 // Data out
#define TFT_SCLK 13 // Clock out
#define CLOCK_RADIUS 90 // Radius of the clock
#define HOUR_HAND_LENGTH 50 // Length of the hour hand
#define MINUTE_HAND_LENGTH 70 // Length of the minute hand
#define SECOND_HAND_LENGTH 80 // Length of the second hand
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
void setup() {
tft.init(240, 280); // Initialize ST7789 with 240x280 resolution
tft.setRotation(1); // Set display rotation (0,1,2,3)
tft.fillScreen(ST77XX_BLACK); // Clear the screen with black color
}
void drawClock() {
// Clear the area where the clock hands were previously drawn
tft.fillCircle(120, 140, 2, ST77XX_BLACK);
tft.drawLine(120, 140, 120 + HOUR_HAND_LENGTH * cos((6 * hour() - 90) * PI / 180), 140 + HOUR_HAND_LENGTH * sin((6 * hour() - 90) * PI / 180), ST77XX_BLACK);
tft.drawLine(120, 140, 120 + MINUTE_HAND_LENGTH * cos((6 * minute() - 90) * PI / 180), 140 + MINUTE_HAND_LENGTH * sin((6 * minute() - 90) * PI / 180), ST77XX_BLACK);
tft.drawLine(120, 140, 120 + SECOND_HAND_LENGTH * cos((6 * second() - 90) * PI / 180), 140 + SECOND_HAND_LENGTH * sin((6 * second() - 90) * PI / 180), ST77XX_BLACK);
// Draw clock hands
tft.drawLine(120, 140, 120 + HOUR_HAND_LENGTH * cos((6 * hour() - 90) * PI / 180), 140 + HOUR_HAND_LENGTH * sin((6 * hour() - 90) * PI / 180), ST77XX_WHITE);
tft.drawLine(120, 140, 120 + MINUTE_HAND_LENGTH * cos((6 * minute() - 90) * PI / 180), 140 + MINUTE_HAND_LENGTH * sin((6 * minute() - 90) * PI / 180), ST77XX_WHITE);
tft.drawLine(120, 140, 120 + SECOND_HAND_LENGTH * cos((6 * second() - 90) * PI / 180), 140 + SECOND_HAND_LENGTH * sin((6 * second() - 90) * PI / 180), ST77XX_RED);
// Draw clock face
tft.fillCircle(120, 140, 2, ST77XX_WHITE); // Draw center point
for (int i = 0; i < 360; i += 30) {
float angle = i * PI / 180;
tft.drawPixel(120 + CLOCK_RADIUS * cos(angle), 140 + CLOCK_RADIUS * sin(angle), ST77XX_WHITE);
}
}
void loop() {
drawClock();
delay(1000); // Update every second
}