“开源LED点阵时钟/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
调试
调试
第70行: 第70行:
 
*打开应用程序,搜索蓝牙设备,连接到你的蓝牙设备。连接成功就可以控制,否则进行重新连接。
 
*打开应用程序,搜索蓝牙设备,连接到你的蓝牙设备。连接成功就可以控制,否则进行重新连接。
 
*成功就可以通过button来控制。需要长按按钮,等界面切换就可以松开botton。可以显示日期、星期。等界面显示完毕又返回现实时间。
 
*成功就可以通过button来控制。需要长按按钮,等界面切换就可以松开botton。可以显示日期、星期。等界面显示完毕又返回现实时间。
[[File:DcolorMatrix ble.jpg|600px|center|thumb]]
+
[[File:DcolorMatrix ble.jpg|400px|center|thumb]]
  
 
==程序==
 
==程序==

2016年3月2日 (三) 02:09的版本

Language English


概述

  • 项目名称:Microduino 点阵级联时钟
  • 目的:通过四个Microduino Dot Matrix级联来实现电子万年历,并且通过Android手机来切换显示。
  • 难度:中级
  • 耗时:3小时
  • 制作者:Microduino Studio

材料清单

  • Microduino设备
模块 数量 功能
Microduino-Core/zh 1 核心板
Microduino-USBTTL/zh 1 下载程序
Microduino-RTC/zh 1 读取时间
Microduino-BT/zh 1 手机与Core通讯
Microduino-Module Dot Matrix/zh 4 显示
  • 其他设备
USB数据线 1 供电,下载
面包板跳线 1 连接电路

文档

请保持更新下载Microduino官方最新的IDE

测试程序: Dot-Matrix-Clock.ino

调试

  • 硬件搭建:

步骤一:Microduino-Module Dot Matrix采用IIC驱动,由于在I2C总线上的每个设备都必须有一个唯一的地址,因此需要更改,否则你会得到很多奇怪的现象。 更改地址: 在《开源LED点阵屏幕》教程中有介绍怎么设置Dot Matrix模块的IIC地址,在这里再简单说下,先按着模块背面的按键,再接上电源,待屏幕变白色后应立即放开按键,屏幕有多少个白格子代表iic地址就是多少。慢按背面按键是地址加一,快按背面按键是减一,按住不放待屏幕变灭或有变化即可设置成功。(如果屏幕亮的时候时候所有格子都是白色也不可认为此模块的iic地址就是64,可能会溢出,最好手动调到64) 程序实现:

 uint8_t Addr[MatrixPix_X][MatrixPix_Y] = {                 
{ 64, 63, 62, 61}};       //1x4

定义了四个Dot Matrix模块的IIC地址是64,63,62,61,排列方式是1x4。

步骤二:将更改了IIC的地址底板级联,只有按定义的地址顺序从左往右连接好Dot Matrix模块就行。

步骤三:接上核心模块(Microduino Core+Microduino USBTTL+Microduino RTC+Microduino BT) 注意:因为一块控制板最多能叠加两块Microduino模块。BT采用软串口mySerial,玩家可根据情况更改蓝牙模块跳线来改变串口。

  • 软件调试:

步骤一:下载使用到的库,将其解压到IDE的libraries文件夹内。

步骤二:下载示例程序并打开,编译通过后选择好板卡直接下载。

如果成功在点阵屏上就可以显示时间了。

步骤三:通过蓝牙调整时间,如果RTC长时间不供电的话,时间将会出错,但是为了避免每次需要通过下载程序的办法来调整时间,我们采用BT(4.0)结合Android设备来调节时间。使用手机切换显示界面。客户端在程序文件夹里面:文件:Blueclock.apk

  • 打开手机蓝牙
  • 打开应用程序,搜索蓝牙设备,连接到你的蓝牙设备。连接成功就可以控制,否则进行重新连接。
  • 成功就可以通过button来控制。需要长按按钮,等界面切换就可以松开botton。可以显示日期、星期。等界面显示完毕又返回现实时间。
DcolorMatrix ble.jpg

程序

下载:文件: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坐标 “char”:要显示的字符串 long:字符串长度*8 color:字体颜色(LED_RED,LED_GREEN,LED_YEELOW) Time:移动速度 通过读取RTC时钟,将特定的数值以坐标形式显示出来就行。 注意:你需要将BT模块和Core核心模块叠加在同一个板子上进行调试,因为LED点阵级联的是电源、地、IIC四个引脚,而BT默认的则是软串口(D4、D5),因此需要将BT模块和Core核心模块叠加在一起。

  • 前往Appstore下载Lightblue,使用方法参考:Microduino_BT串口透传数据到IOS设备
  • 发送数据格式为:t:year,month,day,hour,minute,week,注意年份暂时涉及两位就行,比如2014年只要写14就行。
  • 当时间设置完毕,屏幕上会显示“Time is OK”。这时你发现时间就更换好了。

当然你也可以通过Android设备来调试,前提是要4.3以上的系统才能支持BT(4.0)模块,同时你需要下载一个蓝牙串口助手来进行调试。发送数据格式和上面一样。

结果

通过实验我们实现了电子万年历,检测温湿度并显示。能够较好的用IOS/Android手机来切换显示。

注意问题

  • IIC地址更换
  • 点阵安装方向
  • 蓝牙串口连接

视频