电子说
步骤1:读取BCD二进制时钟
所描述的时钟使用二进制编码的十进制(bcd)显示方法,首先进行描述。在这种方法中,时间的每个数字都被隔离并显示为二进制数。例如,一分钟的37分钟显示为0000 0011(二进制3)和0000 0100(二进制7)。
每个分段的每个数字(小时,分钟,秒)占据一列。空白列分隔每个对,则使用8列。有时候事情不是很整洁吗?
步骤2:所需的设备
Arduino。
我使用了Nano,因为我可以将所有东西都放在一块面包板上。我购买了一个品牌外的产品。
显示
一个MAX 72xx LED矩阵分支板。请注意,MAX72xx引脚可能因型号而异,请检查)。
电源,地线,三个信号跳线。
我颠倒安装了地雷,因此在其控制引脚上使用了公母跳线。
I2C DS3231实时时钟(RTC)转接板。
电源,地线和两条信号线。
小面包板。
我将所有东西都挤在了400针板上。
用于Arduino的电池或交流适配器(未显示)。
第3步:接线
MAX72xx的五个引脚根据ledControl库页面进行接线。我的7219的针脚顺序与所述的不同。
VCC-+ 5V
GND--接地
DIN(数据输入)-D10
CS(在库中称为“ LOAD”。)-D11
CLK(时钟)-D12
时钟已连接到I2C引脚(检查您的Arduino模型)。对于Nano 。..
VCC-+ 5V
GND--接地
SDA--模拟4
SCL--模拟5
步骤4:关于算法的注释
LED矩阵的每一列均表示一位。分离。将小时,分钟和秒转换为两位数是微不足道的。..
通过将小时除以10(没有余数)来将第一个数字隔离。
将第二个模块除以10(仅余数)()(仅余数)。
我们点亮一列LED,以对应于适当数字的二进制表示形式。为此,我们使用ledcontrol.h库的setRow()函数,该函数需要三个参数
矩阵编号(每个实例库最多可处理8个)。计数从0开始,这就是本草图中使用的数字,因为我们只有一个矩阵。
列号(从左侧开始,编号为0-7)。如所使用的,列0和1分别对应于小时的第一位和第二位数字。
从上到下描述要打开的LED的字节(1 = on)。
小时/分钟/秒个位数字以十进制整数形式返回值(即0-9)。必须使用byte()函数将它们转换为所需的字节(二进制)值(以编程方式来说就是“转换”)。
SetRow(),在我的矩阵上,将LED填充为与输入/输出引脚,但最低有效位(“底部”)更靠近输出引脚-我将其颠倒安装。 (尝试使用您自己的矩阵LED)。请注意,您需要按位数学求逆顺序,以便将LED矩阵右侧向上安装,如果要横向安装LED矩阵,请使用SetColumn函数。
第5步:草图
第6步:改进和注释
构建并运行起来后,我发现令人惊讶的是,显示屏的体积很小,这当然是LED矩阵尺寸的函数。
我有一个座钟,如果可以找到一个便宜的钟表的话,我会拉出马达外壳,用一圈烟熏玻璃或丙烯酸玻璃代替钟面。 (我将尝试在当地的自动窗户着色处停下来并要求报废)。因此,LED矩阵的电路板和芯片将隐藏起来。另一个可能的方法是切割一个染色或涂漆的木质圆圈,以形成很好的对比度,并在其中切出一个方孔,以刺穿LED面。我怀疑我的卷轴看到了技能,因此,我需要伪造某种边框。也许是黄铜的脸?我可以使用飞刀,立铣刀或研磨复合物在车床上制作出光滑的光洁度,或在漂亮的涡旋形图案上进行加工,但需要找出一种方法来在导孔中获得相对直角,而立铣刀则无法实现, -也许是纵切锯。
目前,可以通过重新编程Arduino Nano来调整时间,这是最不切实际的。可以添加三个按钮,每个分段分别为一个小时,分钟,秒,每个按钮分别按小时,分钟和秒,然后按相应的按钮将当前分段增加一个单位。那是最简单的编程。但是,一个按钮会更优雅:长按进入小时数调整模式,短按递增,等等。
我想将草图转移到ATTiny85并收回我的Nano板(也更容易转移到时钟盒中。)
全部0条评论
快来发表一下你的评论吧 !