Календарь на Arduino.
![]() |
Макеты для проверки вариантов шрифтов и расположения элементов для календаря. |
При программировании возникли некоторые трудности. Это - экономия памяти, попытка запихнуть невпихуемое и чтоб было красиво.
![]() |
Примерно так должен выглядеть экран в календарем. С боку и посередине размерная линейка для удобства центровки. На этой картинке два варианта выделения текущего дня. Числа 14 и 24. |
Например:
1, 8, 15, 22, 29
2, 9, 16, 23, 30
...
и т.д. всего семь строк.
Можно нарисовать строку с нужным порядком цифр или нарисовать отдельно цифры и из них создавать нужную комбинацию.
Я посчитал используемые байты на отрисовку или хранение битового изображения одной строкой в которой записаны цифры с датами и одной цифры из которых собирается нужное число.
Получил следующие данные.
матрица пикселей 5*5=25 байт*7строк=175байт (здесь хранится одна строка, всего их семь)
матрица пикселей 1*5= 5 байт*10строк=50байт (это данные на одну цифру, всего их десять)
Возможно я не правильно посчитал и часть нагрузки уйдет куда-то еще. Пока я оставлю символьный вариант.
Такой вариант, в дальнейшем можно использовать для поиска и выделения текущего дня. Мне хотелось чтобы в календаре был выделен текущий день. В этой версии календаря такую функцию я использовать не буду. На данном этапе, моих знаний не хватило для экономного написания кода. Итак получилась "простыня".
![]() |
Предпалагаемый вариант для выделения текущего числа. |
Была еще сложность с размещение 30 и 31 числа. Они появлялись когда первое число попадало на субботу и воскресенье. Автоматом появлялся шестой столбик с цифрами 30 и 31.
У меня экран 48 пикселей. На один символ зарезервирована три пикселя. Всего нужно вместить 11 символов плюс 16 пробелов (один пиксель между символами и два между знаками). Итого прлучается 11*3+16=49. Мне не хватало одного пикселя для правильной отрисовка чисел 30 и 31. Я решил эти числа слепить вместе, и для этого пришлось немного изменить шрифт. Изменил цифры 2, 3, 8, 9, 0.
![]() |
"Проблемные" цифры и их решение. |
Код исправно работает, вся информация отображается. В дальнейшем, этот экран можно использовать как самостоятельный экран для электронных часов.
![]() |
Так выглядит рабочий процесс написания кода у меня. Такие ошибки появляются только в Arduino 1.6.13 и выше. |
Позже я перенесу каждую функцию на отдельную страницу, а пока все свалено в общую кучу Электронные часы на Arduino. С будильником, таймером и другими плюшками :) Начало.Ищите все связанны статьи с этим проектом #PIX4884
Готовы меня поддержать?
Перечисли любую сумму на Yandex деньги или PayPal (другие варианты пишите на почту).
Часть денег пойдет на реализацию проекта носимых электронных часов PIX4884 (не смарт) на базе Arduino (ATmega 328), остальное, если останется, пойдет на покупку всякой ерунды для её изучения.
Ниже ссылки на кошельки:
paypal.me/ArduClock
money.yandex.ru/to/410011319696385
ПРикольно! Долго мучился?
ОтветитьУдалить
УдалитьДа. Пришлось поломать голову. В первом варианте я использовал картинки для своих символов. Но мне не понравилось, код был массивный и его было сложно использовать в параллельных проектах. Сейчас я переделываю его на использование внешних шрифтов и сокращению размере кода.