如何在Arduino R4 Wifi中获取CloudTime变量值实现闹钟?
解决Arduino IoT Cloud CloudTime变量取值问题
你遇到的问题是调用了错误的方法名,Arduino IoT Cloud的CloudTime类获取小时的方法是getHours()(复数形式),而非getHour()。以下是正确的取值方式:
1. 直接获取时分秒
CloudTime类提供了这些成员函数来获取时间分量:
getHours(): 获取小时(0-23)getMinutes(): 获取分钟(0-59)getSeconds(): 获取秒数(0-59)getDay(): 获取日期(1-31)getMonth(): 获取月份(1-12)getYear(): 获取年份
比如在你的onAlarm1Change()函数中,可以这样获取闹钟时间:
void onAlarm1Change() { // 获取闹钟的时分秒 int alarmHour = alarm1.getHours(); int alarmMinute = alarm1.getMinutes(); int alarmSecond = alarm1.getSeconds(); // 串口打印验证 Serial.print("Alarm time: "); Serial.print(alarmHour); Serial.print(":"); Serial.print(alarmMinute); Serial.print(":"); Serial.println(alarmSecond); }
2. 获取完整时间结构体
如果你需要一次性获取所有时间信息,可以使用getTm()方法获取标准C语言的tm结构体:
void onAlarm1Change() { const tm* alarmTime = alarm1.getTm(); // 访问结构体成员 int hour = alarmTime->tm_hour; int minute = alarmTime->tm_min; int second = alarmTime->tm_sec; int day = alarmTime->tm_mday; int month = alarmTime->tm_mon + 1; // tm_mon从0开始,所以要+1 int year = alarmTime->tm_year + 1900; // tm_year是从1900年开始的偏移量 }
3. 在主循环中实时获取
如果你需要在loop()中随时读取alarm1的值,直接调用上述方法即可,比如:
void loop() { ArduinoCloud.update(); // 实时读取闹钟时间 int currentAlarmHour = alarm1.getHours(); int currentAlarmMinute = alarm1.getMinutes(); // 和当前RTC时间对比,实现闹钟逻辑 RTCTime currentTime; RTC.getTime(currentTime); if(currentTime.getHour() == currentAlarmHour && currentTime.getMinutes() == currentAlarmMinute){ // 触发闹钟动作,比如点亮LED矩阵提示 // ... } delay(1000); }
注意事项
- 确保
ArduinoCloud.update()在loop()中被定期调用,这样设备才能同步云端的alarm1变量值。 - 当云端的闹钟时间更新时,
onAlarm1Change()会自动触发,你可以在这个函数里处理时间更新后的逻辑。
内容的提问来源于stack exchange,提问作者user_767_
相关产品推荐
相关产品推荐

