HSVClock
组件和用品
![]() |
| × | 1 | |||
| × | 1 |
关于这个项目
HSV 时钟
上次访问美国时,我从 RadioShack 买了一个 Seeed 2.8" TFT Touch Shield (V1.0)。我用它为父亲 80 岁生日制作了一个彩色时钟。
HSVLock.zipYouTube重点是
- 钟面 基于矩形单元格的网格。单元格角被随机小量扭曲,每个单元格被随机对角线分割。在单元格上应用随机的颜色分布,并且每个三角形都带有阴影以提供 3D 外观。在内部,颜色表示为 HSV(色相、饱和度和值),但转换为 RGB 以发送到 LCD。通过用互补色为某些单元格着色,时间以简单字体显示。
- 外壳 是激光切割的竹子,在 Inkscape 中设计,由 Ponoko 切割。
- 遗憾的是,防护罩没有安装孔 所以我有效地将它夹在外壳中,靠在前面。 Arduino Uno 通过接头针脚搭载在屏蔽板上。
- 我需要 I2C 访问 外部 RTC (DS3232)。屏蔽层不会暴露未使用的引脚,因此我使用了具有额外 SDA/SCL 引脚的 Uno。我为这些位于屏蔽下方的小型接头连接器制作了一个。我从 ICSP 引脚上的一个类似连接器(也在屏蔽层下方)拉出电源和接地。
- 我添加了简单的夏令时 支持草图(少一个时钟,一年设置两次!)。与处理“九月的最后一个星期天”这样的逻辑不同,它依赖于一个包含未来几年特定开始和结束日期的小表格(在我的例子中是新西兰)。
- 我简化了触摸库代码来制作触摸屏 只是作为去弹跳按钮的 4x4 网格。例如,通过触摸左下角和右上角来设置时间。
- 我为加速做出了一些相当英勇的努力 渲染:重新绘制单元格大约需要四分之一秒。渲染基于写入特定颜色像素的水平行。我使用修改后的 Bresenham 算法来计算构成给定单元格的三角形的一系列线对的水平范围。将像素发送到 LCD 的代码基于库,但经过内联、展开、简化和优化。由于像素颜色数据跨多个 PORTx 写入,因此在选择颜色时会预先计算所有值,因此将一行中的 N 个像素设置为该颜色会更快。
- LCD 用于横向 .我挣扎了很长时间才能让屏幕在水平行中更新。控制器的数据表令人困惑。有设置“光标”位置的命令,“DRAM Horizontal/Vertical Address Set (R20h, R21h)”。像素数据写入光标位置,光标更新,需要时换行等。 还有一个改变屏幕方向的命令,“输入模式(R03h)”,也谈到了调整光标的行和列增量。但是,我发现将方向更改为横向然后定位光标不起作用。我最终找到的解决方案(可能埋在数据表中)是使用“window”命令而不是光标命令; “水平和垂直 RAM 地址位置(R50h、R51h、R52h、R53h)”。设置窗口左上角的坐标意味着像素数据从那里开始并水平更新(横向)。
电路
电路很简单
- 安装在 Uno 上的 TFT 防护罩。
- +5VDC、接地、SDA 和 SDL 从 Uno 上标记的引脚连接到 RTC 模块。显示在下面的前三张照片中(屏蔽移除)。请注意,出于访问原因,电源/接地来自 ICSP1 连接器。
















制造工艺