HSVClock
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 |
Об этом проекте
Часы HSV
Когда я в последний раз был в США, я купил сенсорный экран Seeed 2,8 "TFT Touch Shield (V1.0) от RadioShack. Я использовал его, чтобы сделать красочные часы для своего отца на его 80-летие.
HSVClock.zipYouTubeВажные моменты
- циферблат основан на сетке прямоугольных ячеек. Углы ячеек искажаются на небольшие случайные величины, и каждая ячейка делится на случайную диагональ. К ячейкам применяется случайный набор цветов, и каждый треугольник закрашивается для придания трехмерного вида. Внутри цвета представлены как HSV (оттенок, насыщенность и значение), но преобразованы в RGB для отправки на ЖК-дисплей. Время отображается простым шрифтом путем раскрашивания определенных ячеек дополнительными цветами.
- корпус это вырезанный лазером бамбук, разработанный в Inkscape, вырезанный Ponoko.
- К сожалению, на экране нет монтажных отверстий . поэтому я эффективно зажимаю его в корпусе напротив передней панели. Arduino Uno подключается к щиту через контакты заголовка.
- Мне нужен I2C-доступ к внешнему RTC (DS3232). На экране не видны неиспользуемые контакты, поэтому я использовал Uno с дополнительными контактами SDA / SCL. Я сделал для них низкопрофильный разъем, который находится под экраном. Я отключил питание и землю от аналогичного разъема на контактах ICSP, также под экраном.
- Я добавил простой переход на летнее время поддержка эскиза (на один час меньше, чтобы устанавливать два раза в год!). Вместо того, чтобы иметь дело с логикой вроде «последнее воскресенье сентября», он полагается на небольшую таблицу с конкретными датами начала и окончания на будущие годы (в моем случае для Новой Зеландии).
- Я упростил код библиотеки Touch, чтобы сделать сенсорный экран просто действуйте как сетка 4x4 кнопок без отскока. Например, время устанавливается касанием левого нижнего и правого верхнего углов.
- Я приложил немало героических усилий, чтобы ускорить рендеринг:перерисовка ячеек занимает около четверти секунды. Рендеринг основан на записи горизонтальных рядов пикселей определенного цвета. Я использую модифицированный алгоритм Брезенхема для вычисления горизонтальных размеров серии пар линий, которые составляют треугольники в данной ячейке. Код, который отправляет пиксели на ЖК-дисплей, основан на библиотеке, но встроен, развернут, упрощен и оптимизирован. Поскольку данные о цвете пикселей записываются в несколько PORTx, все значения предварительно вычисляются при выборе цвета, поэтому установка этого цвета для N пикселей в строке выполняется быстрее.
- ЖК-дисплей используется в альбомной ориентации . . Я долго боролся, чтобы экран обновлялся горизонтальными рядами. Таблица на контроллер сбивает с толку. Существуют команды для установки «курсора», «Установка адреса DRAM по горизонтали / вертикали (R20h, R21h)». Пиксельные данные записываются в месте расположения курсора, и курсор обновляется, переходя при необходимости на следующую строку и т. Д. Также есть команда для изменения ориентации экрана «Режим ввода (R03h)», в которой также говорится о настройке строки и столбца курсора. приращения. Однако я обнаружил, что изменение ориентации на альбомную и последующее позиционирование курсора не помогло. Решение, которое я в конце концов нашел (которое может быть скрыто в таблице данных), состоит в том, чтобы использовать команду «окна» вместо команды курсора; «Положение адреса ОЗУ по горизонтали и вертикали (R50h, R51h, R52h, R53h)». Установка координат левого верхнего угла окна означает, что данные пикселей начинаются с этого места и обновляются по горизонтали (в альбомной ориентации).
Схема
Схема просто
- экран TFT, установленный на Uno.
- +5 В постоянного тока, заземление, SDA и SDL идут от помеченных контактов на Uno к модулю RTC. Показано на первых трех фотографиях ниже (щит снят). Обратите внимание, что для обеспечения доступа питание / земля поступает от разъема ICSP1.
Производственный процесс