37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。
** 【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器**
实验模块接线示意图
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器
项目之六:通过串口监视器输出报警状态
实验开源代码
/*
【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二百四十五:DS3231 高精度时钟模块 IIC/I2C接口 实时计时传感器
项目之六:通过串口监视器输出报警状态
*/
#include <DS3231.h> // 引入 DS3231 实时时钟库
#include <Wire.h> // 引入 I2C 通信库
// **创建 DS3231 RTC 对象**
DS3231 myRTC;
void setup() {
// **初始化 I2C 通信**
Wire.begin();
// **初始化串口通信,波特率为 57600**
Serial.begin(57600);
// **设置 "报警1",每分钟触发**
// 关闭 Alarm1,不需要手动打开
myRTC.turnOffAlarm(1);
myRTC.setA1Time(0, 0, 0, 0, 0b01111110, false, false, false);
myRTC.checkIfAlarm(1);
// **设置 "报警2",每分钟触发**
// 关闭 Alarm2,不需要手动打开
myRTC.turnOffAlarm(2);
myRTC.setA2Time(0, 0, 0, 0b01111110, false, false, false);
myRTC.checkIfAlarm(2);
}
void loop() {
// **初始化 AlarmBits(报警状态位)**
byte AlarmBits = 0x0;
Serial.print("初始化 AlarmBits: ");
Serial.println(AlarmBits, BIN); // 以二进制格式打印
// **初始化时间变量**
byte ADay, AHour, AMinute, ASecond;
bool ADy, Ah12, APM;
// **获取 "报警1" 时间(不清除报警标志)**
myRTC.getA1Time(ADay, AHour, AMinute, ASecond, AlarmBits, ADy, Ah12, APM);
Serial.print("获取 A1 时间: ");
Serial.println(AlarmBits, BIN); // 预期值:0x(0000)1110
// **获取 "报警2" 时间(不清除报警标志)**
myRTC.getA2Time(ADay, AHour, AMinute, AlarmBits, ADy, Ah12, APM);
Serial.print("获取 A2 时间: ");
Serial.println(AlarmBits, BIN); // 预期值:0x01111110
// **获取 "报警1" 时间(清除报警标志)**
myRTC.getA1Time(ADay, AHour, AMinute, ASecond, AlarmBits, ADy, Ah12, APM, true);
Serial.print("清除后获取 A1 时间: ");
Serial.println(AlarmBits, BIN); // 预期值:0x(0000)1110
// **获取 "报警2" 时间(清除报警标志)**
myRTC.getA2Time(ADay, AHour, AMinute, AlarmBits, ADy, Ah12, APM, true);
Serial.print("清除后获取 A2 时间: ");
Serial.println(AlarmBits, BIN); // 预期值:0x01110000
delay(5000); // **每 5 秒更新一次数据**
}
代码解读
这段代码使用 DS3231 实时时钟(RTC)模块 管理 报警系统,并通过 串口监视器输出报警状态,核心逻辑如下:
-
初始化 RTC
✅ DS3231 myRTC; → 创建 DS3231 RTC 实例
✅ Wire.begin(); → 启动 I2C 通信
✅ Serial.begin(57600); → 设置串口波特率为 57600 -
设置报警
✅ turnOffAlarm(1); → 关闭 Alarm1
✅ setA1Time(0, 0, 0, 0, 0b01111110, false, false, false); → 设置 Alarm1,每分钟触发
✅ turnOffAlarm(2); → 关闭 Alarm2
✅ setA2Time(0, 0, 0, 0b01111110, false, false, false); → 设置 Alarm2,每分钟触发 -
读取报警状态
✅ getA1Time() → 获取 Alarm1 的时间数据
✅ getA2Time() → 获取 Alarm2 的时间数据
✅ Serial.println(AlarmBits, BIN); → 以二进制格式显示报警状态 -
采集间隔
✅ delay(5000); → 每 5 秒更新一次数据
这段代码让 DS3231 模块管理报警,并在串口监视器查看报警状态。
实验串口返回情况