回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【花雕学编程】Arduino动手做(245)---DS3231 高精度时钟模块之通过串口监视器输出报警状态 简单

头像 驴友花雕 2025.05.11 5 0

00.jpg
02.jpg
04-.jpg
04--.jpg
05.jpg

  【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)模块 管理 报警系统,并通过 串口监视器输出报警状态,核心逻辑如下:

1. 初始化 RTC
✅ DS3231 myRTC; → 创建 DS3231 RTC 实例 
✅ Wire.begin(); → 启动 I2C 通信 
✅ Serial.begin(57600); → 设置串口波特率为 57600

2. 设置报警
✅ 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,每分钟触发

3. 读取报警状态
✅ getA1Time() → 获取 Alarm1 的时间数据 
✅ getA2Time() → 获取 Alarm2 的时间数据 
✅ Serial.println(AlarmBits, BIN); → 以二进制格式显示报警状态

4. 采集间隔
✅ delay(5000); → 每 5 秒更新一次数据

这段代码让 DS3231 模块管理报警,并在串口监视器查看报警状态。

 

实验串口返回情况

 

09.jpg

08-1.jpg

评论

user-avatar
icon 他的勋章
    展开更多