Представляю вашему вниманию стрелочные часы на Oled дисплее. Проект предназначен для практического изучения работы с дисплеем. Состоит он изArduino Nano и самого Oled дисплея.
Алгоритм работы: каждую секунду секундная стрелка движется и увеличивается количество секунд, когда секунд будет =60,тогда добавляется 1 минута, аналогично с часом.
В коде прокомментировал каждую строчку.
Жду вашей критики или же предложений по доработке.

Алгоритм работы: каждую секунду секундная стрелка движется и увеличивается количество секунд, когда секунд будет =60,тогда добавляется 1 минута, аналогично с часом.
В коде прокомментировал каждую строчку.
C++:
//Подключем библиотеки для работы с дисплеем
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"
//Объявлем пины управления
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS); //Что это такое?Показываем пины библиотеке для работы?
int X=90; //Центр окружности и так же ось стрелочек
int Y=32; //Центр окружности и так же ось стрелочек
int Xs; //Вторая точка секудной стрелки
int Ys; //Вторая точка секудной стрелки
int Xm; //Вторая точка минутной стрелки
int Ym; //Вторая точка минутной стрелки
int Xh; //Вторая точка часовой стрелки
int Yh; //Вторая точка часовой стрелки
int second=0; // Начальное значение секунды
int minutes=37; // Начальное значание минуты
int hour=14; // Начальное значение часов
void setup() {
display.begin(SSD1306_SWITCHCAPVCC); //Инициализируем дисплей
display.clearDisplay(); //Очищаем дисплей
display.setTextColor(WHITE); //Установка цвета текста
display.setTextSize(1); //Установка размера шрифта
display.drawCircle(X, Y, 31, WHITE); //Рисуем кружок (drawCircle(X,Y,Радиус,Цвет)
}
void loop() {
display.drawLine(X, Y, Xs, Ys, BLACK); //Стираем старую секундную стрелку
Xs = 90 + sin(2*PI*second/60)*27; //Считаем координаты конца секундной стрелки. (Xs=[Координаты оси по Х] + sin(2*PI*[Значения секунды]/[Количество делений])*[Длина стрелки])
Ys = 32 - cos(2*PI*second/60)*27; //Считаем координаты конца секундной стрелки. (Ys=[Координаты оси по Y] - cos(2*PI*[Значения секунды]/[Количество делений])*[Длина стрелки])
display.drawLine(X, Y, Xs, Ys, WHITE); //Рисуем новую секудную стрелку
display.drawLine(X, Y, Xm, Ym, BLACK); //Всё тоже самое что и с секундной
Xm = 90 + sin(2*PI*minutes/60)*29; //Только поменял длину стрелки
Ym = 32 - cos(2*PI*minutes/60)*29;
display.drawLine(X, Y, Xm, Ym, WHITE);
display.drawLine(X, Y, Xh, Yh, BLACK); //Всё тоже самое что и с секундной и минутной
Xh = 90 + sin(2*PI*hour/12)*26; //Только поменял длину стрелки
Yh = 32 - cos(2*PI*hour/12)*26; //И количество делений
display.drawLine(X, Y, Xh, Yh, WHITE);
display.display(); //Обновляем дисплей,чтобы стрелки показались
second++; //Добавляем 1 к переменной секунд
if (second==60) second=0, minutes++; //Если переменная секунд=60,тогда обнуляем переменную секунд и добавляем 1 к минутам
if (minutes==60) minutes=0, hour++; //Если переменная минут=60,тогда обнуляем переменную минут и добавляем 1 к часам
display.fillRect(0, 0, 60, 8, BLACK); //Очищаем поле со временем {fillRect([Начальная точка по Х],[Начальная точка по Y],[Вторая точка по X],[Вторая точка по Y],[Цвет])}
display.setCursor(0,0); //Установка начала текста
display.print(hour); //Пишем количество часов
display.print(":"); //Пишем две точки
display.print(minutes); //Пишем количество минут
display.print(":"); //Пишем две точки
display.print(second); //Пишем количество секунд
delay(1000); //Делаем задержку которая равна 1секунде
}
