“开源LED点阵时钟/zh”的版本间的差异
(→实验原理(IIC地址设置)) |
(→其他设备) |
||
第32行: | 第32行: | ||
|} | |} | ||
===其他设备=== | ===其他设备=== | ||
− | { | + | { |
|- | |- | ||
|USB数据线 || 1 ||供电,下载 | |USB数据线 || 1 ||供电,下载 |
2016年3月11日 (五) 06:03的版本
Language | English |
---|
目录概述
材料清单Microduino设备
其他设备{ | |||||||||||||||||||||
USB数据线 | 1 | 供电,下载 |
实验原理(IIC地址设置)
- Microduino-Module Dot Matrix/zh模块采用IIC通信,因为在I2C总线上的每个设备都必须有一个唯一的地址,所以每一块点阵模块需要不同的地址,需要手动设置模块的IIC地址
- 更改点阵模块IIC地址可以参考[点阵模块IIC地址设置方法]教程
- 点阵级联的程序实现:
uint8_t Addr[MatrixPix_X][MatrixPix_Y] = { { 64, 63, 62, 61}}; //1x4 定义了四个Dot Matrix模块的IIC地址是64,63,62,61,排列方式是1x4。
程序下载
请保持更新下载Microduino官方最新的IDE
从下面链接下载程序: Dot-Matrix-Clock.ino
堆叠模块
- 将microduino模块叠在一块(Microduino-Core/zh+Microduino-USBTTL/zh +Microduino-RTC/zh1 +Microduino-BT/zh + Microduino-Cube-S1/zh)
- 然后Microduino-Module Dot Matrix/zh用传感器线与Microduino-Cube-S1/zh连接。
- 注意:最好不要将所有模块堆叠在一起之后再上传程序
配置环境
- 打开Arduino IDE for Microduino,环境,(搭建参考:AVR核心:Getting started/zh)
- 确认“板卡(Microduino-Core/zh)”与“处理器(Atmega328P@16M,5V)”选择无误,并选中对应端口号(COMX)
下载程序
- 打开你所下载的项目中“Dot-Matrix-Clock.ino”程序
- 点击"→"按钮下载程序到开发板上
如果成功在点阵屏上就可以显示时间了。
蓝牙下载
因为RTC长时间不供电的话,时间将会出错,但是为了避免每次需要通过下载程序的办法来调整时间,我们采用BT(4.0)结合Android设备来调节时间。
- 客户端在程序文件夹里面 文件:Blueclock.zip
- 打开手机蓝牙
- 打开应用程序,搜索蓝牙设备,连接到你的蓝牙设备。连接成功就可以控制,否则进行重新连接
- 成功就可以通过APP来控制点阵屏幕的显示
- 点击sync time with phone,点阵屏幕会同步手机的时间
- 在输入栏写入‘hello microduino’,点击send message,点阵屏幕上会显示输入的字符
拼装过程
- 将microduino模块叠在一块(Microduino-Core/zh+Microduino-USBTTL/zh +Microduino-RTC/zh1 +Microduino-BT/zh + Microduino-Cube-S1/zh)
- 将更改了IIC地址的点阵模块按定义的地址顺序从左往右连接,即完成级联。
- 将IIC地址最小或最大的点阵模块连接[[[Microduino-Cube-S1/zh]]
代码说明
下载:文件:Dot Maxtrix Clock.zip 库函数分析:
- 蓝牙:
while (mySerial.available()) {...}
当串口有数据时有效。
mySerial.read()
读取软串口传输的数据
if (c == 't' && buffer_num == 0 && !buffer_sta_d) buffer_sta_t = true; if (c == 'm' && buffer_num == 0 && !buffer_sta_t) buffer_sta_d = true;
判断是日期数据还是时间数据
strstr((char *)buffer, "t")
返回buffer中第一次出现"t"字符的地址
sscanf((char *)strstr((char *)buffer, "t"), "t%d,%d,%d,%d,%d,%d", &sta[0], &sta[1], &sta[2], &sta[3], &sta[4], &sta[5]);
从buffer中"t"字符第一次出现的地址起,按%d格式读取数值写入到sta[]中
bleUpdata()
通过软串口传输数据,手机上按钮只有在按下 情况下发送指定字符,如果松开就就发送“0”字符,这样在没有按下情况下,将会一直显示时间。
- RTC:
rtc.getDate(); rtc.getTime(); setTime(rtc.getHour(), rtc.getMinute(), rtc.getSecond(), rtc.getDay(), rtc.getMonth(), rtc.getYear())
获得rtc的日期时间数据
rtc.setDate(day(), weekday() , month(), 0, year() - 2000); //day, weekday, month, century(1=1900, 0=2000), year(0-99) rtc.setTime(hour(), minute() , second()); //hr, min, sec
按时,分,秒,日,月,年设置
- display:
display.print(second() % 2 ? " " : ":");
闪速的秒钟,用过判断秒是否能被2整除,如果能就显示,否者不显示
display.getDeviceAddr(a)
获得设备IIC地址
display.getWidth(),display.getHeight()
返回X,Y坐标
display.setLedColor(x, y, random(0, 255), random(0, 255), random(0, 255))
随机设置每个LED的颜色
display.clearDisplay()
清理屏幕显示
display.setColor(X,Y,Z)
设置全屏颜色 X:红色 Y:绿色 Z:蓝色
display.writeString("string", MODE, time ,z)
string:任意字符串, MODE:MODE_H横向显示字符/MODE_V竖向显示字符, time:显示的时间(字符在屏幕流动速度) ,z:X/Y坐标
通过读取RTC时钟,将特定的数值以坐标形式显示出来就行。
FAQ
- Q:怎么知道IIC地址是多少?
- A:点阵模块接上电源,待屏幕亮后按一下按键,屏幕上亮多少个白格代表iic地址就是多少
- Q:多个点阵模块按什么顺序连接?
- A:按Dot Matrix模块设置的IIC地址顺序从左往右连接
- Q:蓝牙模块为什么不需要改跳线?
- A:本教程中蓝牙模块采用的是默认软串口mySerial(4,5),不需要跳线。深入了解蓝牙模块可参考蓝模块配置Microduino-Module BLE/zh。
|}