本帖最后由 迷你强 于 2015-12-20 16:59 编辑
为了体现以下OCROBOT Easy的用途,我们今天来展示以下我自己用各种现成模块搭建的一个时钟小作品。本作品目前还很不完善,可以增加各种扩展,比如闹钟,网络提醒等,需要大家自己去探索,去玩,仅仅是举例子,嘿嘿。
我们需要用到的材料:
芯片忘记放进去拍了{:soso_e149:}
清单如下
本教程需要用到的库文件 U8GLIB 请提前将库文件下载好,安装好
我们已经看到了上面的零件列表,都是很常见的东西,另外,你的mangoII板子也是必须品(或者arduinoUNO),因为我们会利用arduino板做ISP下载器,来给Easy控制器下载程序(毕竟它省掉了USB部分不是么?),电池系统如果觉得不好可以选择2节AAA电池的电池盒供电,也是提供的3V电源。
首先我们要对Easy下载程序,如果看过我之前帖子的朋友可能会记得下载电路,非常的简单,看下图:
下载需要使用mangoII作为ISP下载器使用所以我们需要将IDE中“文件-示例-arduinoISP”程序下载进mangoII板里,然后再将板卡选项选择到“OCROBOT Easy ARDUINO (8M,3.3V) ATMEGA328p”,确认COM口号无误,将编程器选项选择到“arduino as ISP” 然后将下面的程序复制进去,点击“文件-使用编程器下载”就能够完成将程序下载到Easy
- //=======调用U8GLIB液晶屏驱动库=====
- #include "U8glib.h"
- U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
- //=======调用DS3231时钟驱动库======
- #include <DS3231.h>
- #include <Wire.h>
- //========定义时钟需要的各种变量========
- DS3231 Clock;
- bool Century=false;
- bool h12;
- bool PM;
- byte ADay, AHour, AMinute, ASecond, ABits;
- bool ADy, A12h, Apm;
- int second,minute,hour,date,month,year,temperature;
- void setup(void) {
- Clock.setClockMode(true);
- }
- void loop(void) {
- //=======读取时钟的各种中值,存入对应变量========
-
- second=Clock.getSecond(); //秒
- minute=Clock.getMinute(); //分
- hour=Clock.getHour(h12, PM); //小时 (分上午和下午模式)
- date=Clock.getDate(); //日
- month=Clock.getMonth(Century); //月
- year=Clock.getYear(); //年(仅2位)
- temperature=Clock.getTemperature(); //温度 (正负2-3摄氏度误差,温度仅供参考)
-
- //======开始显示==========
- u8g.firstPage();
- do {
- draw();
- } while( u8g.nextPage() );
-
- }
- //======定义的显示模式======
- void draw(void) {
- u8g.setPrintPos(0, 45); //定义显示位置 横向起始位置0 纵向45
- if(PM==0) //判断变量PM返回值 0就显示AM 1就显示PM
- {
- u8g.print("AM");
- }else
- {u8g.print("PM");}
- u8g.setFont(u8g_font_freedoomr25n); //设定字体(具体请参看 U8GLIB google code页面,大量字体可选)
- u8g.print(hour); //输出小时的值
- u8g.print(":"); //显示一个冒号
- u8g.print(minute); //显示分钟的值
- u8g.setFont(u8g_font_freedoomr10r); //调整显示字体
- u8g.print(":"); //再显示冒号
- u8g.print(second); //显示秒
- }
复制代码
然后我们拆掉上面的电路,单独取出mangoII板子,并且拿出时钟模块,我们要给时钟模块进行初始化,配置其时间,请先检查是否已经将IDE中的板卡选择回ARDUINO UNO!,请将下面的程序根据自己的时间进行调整后下载到arduino。先来看电路连接图
模块暂时没有绘制,找个差不多的图替代, 大家看看好了, 将电源和GND接好,将SDA接到A4 SCL接到A5,即可,然后我们将程序下载进去
- //调用DS3231库与i2c驱动库
- #include <DS3231.h>
- #include <Wire.h>
- //初始化ds3231以及所需要的变量
- DS3231 Clock;
- bool Century=false;
- bool h12;
- bool PM;
- byte ADay, AHour, AMinute, ASecond, ABits;
- bool ADy, A12h, Apm;
- byte year, month, date, DoW, hour, minute, second;
- void setup() {
- // 初始化i2c库
- Wire.begin();
- Clock.setSecond(50);//配置秒
- Clock.setMinute(46);//配置分钟
- Clock.setHour(14); //配置小时(24小时制)
- Clock.setDoW(7); //配置星期
- Clock.setDate(20); //配置日
- Clock.setMonth(10); //配置月
- Clock.setYear(13); //配置年 (仅最后两位)
- /*
- 将时间按照要求填好将程序下载到arduino板子中即可完成时间配置,误差个几秒就装作不知道好了。
- */
- }
- void loop() {
- }
复制代码
下载完成后时间即校准完毕,我们拆掉电路来搭建最后的完成品(时钟模块断电后依旧会利用所配的电池运行,所以断电无妨)。
依照下面的图进行搭建最终电路
图有点丑,不过意思到了,就是将所有模块的SCL接到A5 SDA接到A4 ,其中需要注意的是Easy的供电数字端是由VCC供电,模拟端是由AVCC供电,我们的IO口使用A4 A5,所以我们要对AVCC进行供电
实物组装图如下
好了,大家的时钟应该走动了
目前2032供电系统依旧在做稳定性测试,目前的数据是一颗可以给系统提供1个小时的能量,之后就会电力不足,需要重新充电。如果配合可靠的能量节约技术,应该能提高系统待机时间~~~
本实验略显复杂,大家需仔细研究才能弄清楚步骤,有任何问题,回帖提问即可,我会逐步完善内容。 |