cocoakang +

DS3231

既然是闹钟,就一定要有获取时间的方法,在某宝上一搜就搜出一大堆时钟模块。仔(sui)细(bian)瞅了瞅,选了型号为DS3231的芯片。 长这个样子: Image text Image text

这里就比较坑了,寄回来的模块并不送电池,没有电池就无法维持时间信息,而懒得出门的我,就测试一下接口好了。主要参考这篇文章

DS3231基本情况

DS3231是一个可以提供时间信息的模块,支持I2C协议。 买回来的模块留出了6个引脚,其功能描述如下: VCC:外部电源供电(5V) GND:外部电源回路 SCL:I2C通信引脚 SDA:I2C通信引脚 SQW:中断信号或特殊信号输出 32K:32K信号输出 从商家给的原理图可以看出,SQW被接在了DS3231芯片的int引脚,32K是32kHz: Image text 技术手册上对这两个引脚的描述如下: Image text Image text

之后这个闹钟的功能可能会被用到。

接线

如上面所说,VCC与GND分别连接arduino的VCC与GND。 博主的Arduino是UNO型号,所以SCL与SDA分别连接给出的SCL与SDA。(这个库中应该可以选,不过为了方便,之后再说修改)

测试

如之前教程所说,Henning Karlsen已经写好了。那当然是要站在巨人的肩膀上啦!做学术之前查阅文献还是很重要的(大雾)。

下好库文件后,打开arduino的IDE,安装库文件。 Image text 安装好后,库的示例文件也被自动添加到了系统示例中,可以在文件->示例->第三方库示例中找到。

示例程序给出了4个,直接运行下载: Serial easy: Image text Serial hard: Image text 猛地一看,似乎Serial hard只是easy的话痨版?哈哈。 仔细看看代码,原来easy版的是使用了自带函数,而hard版是获取一个Time对象,然后在arduino中解析这个对象。

基本使用过程为:

  1. 初始化DS3231(设置当前时间,闹钟等)
  2. 获取Time对象
  3. 解析
  4. 中断处理等

Time类定义如下: Image text 每个成员都的含义都是实际含义。

此外

这个芯片还集成了温度模块,不过应该用不上,就没管它,用到时候再说。

闹钟

仔细看了看库,发现这个头文件并没有设置闹钟相关的成员函数。 上网搜了搜看,发现一个更新的 这里逻辑与刚才的库大同小异,调用函数即可读取或设置闹钟。

Blog

Photo

Project