Реализовать программно стрелочные часы — задание, которое часто дают школьникам на уроке информатики. Так преподаватель убеждается, что ученик хорошо знает не только изучаемый язык программирования, но и тригонометрию. Но тот компьютер, на котором школьник решает эту задачу, слишком мощен для неё, даже если это древний 386-й, не говоря уж о современных. Со всей задействованной там математикой справится и Arduino — так решил автор Instructables под ником thescientistformerlyknownasNaegeli. Вот он берёт Arduino Pro Mini на 3,3 В, однобитный дисплей для телефона Nokia 5110, модуль часов реального времени на микросхеме DS3231, аккумулятор и контроллер заряда, различные принадлежности:
Всё это он собирает по такой схеме:
Но в сборке здесь нет ничего сложного. Самое интересное — математика, за которую мастер и берётся. Далее он показывает направление координат на дисплее:
Усложняя себе задачу, мастер реализует стрелки, более сложные, чем отрезки прямых, школьники на уроках информатики до такого усложнения доходят редко, а потом, когда вырастают — навёрстывают.
Мастер останавливается на наиболее сложном варианте, где стрелка состоит из четырёх точек, и показывает формулы для расчёта координат этих точек на примере двух времён: 9:25 и 2:05.
Угол наклона минутной стрелки в градусах рассчитать просто: достаточно умножить число минут на 6. Только сам угол откладывать по часовой стрелке, а не против, как это обычно делают. Для часовой стрелки угол рассчитать сложнее, если учесть, что она не перепрыгивает с деления на деление, а перемещается между ними плавно:
угол = (часы x 30°) + (минуты x 0.5°)
Ну и направление координат на дисплее тоже нужно учитывать, кстати, в школьных DOSовских Бейсиках оно тоже отличается от того, которым пользуются математики. Но поскольку стрелки будут четырёхточечными, далее математика пускается в ход несколько более сложная.
Профессиональная деформация программиста — штука сильная, она может даже заставить человека программировать на пляже вместо отдыха:
Но вот скетч готов, мастер выкладывает его сюда. После скачивания нужно сменить расширение файла с unknown на ino.
Ну а поскольку при повторении конструкции вы вряд ли будете прорабатывать всю математику заново, хорошо бы изготовить своими руками, со своей математикой (учёт толщины стенок, и так далее), хотя бы корпус, например, из фанеры или оргстекла, а не брать готовый или 3D-печатный.
Часы, повторённые участником Instructables под ником rescueseven: