在前面的介绍中,曾提供一种以2种模式来显示电子时钟的方法,但它却是基于延时函数来实现的,其实在Wio终端也是可以RTC来实现RTC电子时钟的。 当然在Wio终端要使用RTC也是需要有相应库来支持的,在下载了该支持库之后,需按图1所示来添加库。 图1 添加库 在弹出的对话框中,选取图2所示的支持库。 图2 选取支持库 随后编译并上传程序即可进行检测,其程序内容如下: - #include "RTC_SAMD51.h"
- #include "DateTime.h"
- RTC_SAMD51 rtc;
- void setup()
- {
- rtc.begin();
- Serial.begin(115200);
- while (!Serial)
- {
- ;
- }
- DateTime now = DateTime(F(__DATE__), F(__TIME__));
- Serial.println("adjust time!");
- rtc.adjust(now);
- now = rtc.now();
- Serial.print(now.year(), DEC);
- Serial.print('/');
- Serial.print(now.month(), DEC);
- Serial.print('/');
- Serial.print(now.day(), DEC);
- Serial.print(" ");
- Serial.print(now.hour(), DEC);
- Serial.print(':');
- Serial.print(now.minute(), DEC);
- Serial.print(':');
- Serial.print(now.second(), DEC);
- Serial.println();
- DateTime alarm = DateTime(now.year(), now.month(), now.day(), now.hour(), now.minute(), now.second() + 15);
- rtc.setAlarm(0,alarm); // match after 15 seconds
- rtc.enableAlarm(0, rtc.MATCH_HHMMSS); // match Every Day
- rtc.attachInterrupt(alarmMatch); // callback whlie alarm is match
- }
- void loop()
- {
- }
复制代码
该程序的作用为:先调整系统时间并显示时间值, 然后延时15秒钟即发出提示信息,见图3所示。 图3 运行效果 以此外基础,我们可以将它的提示处理改为蜂鸣器的鸣叫,以起到闹钟的作用。 相应的蜂鸣器提示处理程序为: - // #define WIO_BUZZER (12ul)
- // pinMode(WIO_BUZZER, OUTPUT);
- void alarmMatch(uint32_t flag)
- {
- int n;
- Serial.println("Alarm Match!");
- DateTime now = rtc.now();
- Serial.print(now.year(), DEC);
- Serial.print('/');
- Serial.print(now.month(), DEC);
- Serial.print('/');
- Serial.print(now.day(), DEC);
- Serial.print(" ");
- Serial.print(now.hour(), DEC);
- Serial.print(':');
- Serial.print(now.minute(), DEC);
- Serial.print(':');
- Serial.print(now.second(), DEC);
- Serial.println();
- for(n=0;n<6;n++) // delay(6000);
- {
- analogWrite(WIO_BUZZER, 128);
- delay(500);
- analogWrite(WIO_BUZZER, 0);
- delay(500);
- }
- }
复制代码
另外,为增强使用的灵活性,可通过按键来设置闹钟的延迟时间。 此外,我们还可以将RTC的计时功能同图3所示的显示功能结合起来,以达到时钟显示与闹钟提示并存的效果。
图4 计时效果
|