问题描述
我想在 Arduino 中实现这个功能
uint32_t GetSeconds(int hour_Now,int minutes_Now,int seconds_Now,int hour_future,int minutes_future,int seconds_future);
类似这样的事情,但不使用所涉及的日期:
uint32_t future = DateTime(2021,1,16,0).unixtime();
DateTime Now = rtc.Now();
uint32_t timestamp = Now.unixtime();
uint32_t seconds_to_sleep = future - timestamp;
解决方法
将 h,m,s 转换为秒并减去。处理未来超过午夜时的特殊情况。在这种情况下,添加从午夜开始的每个时间的差异。
// Helper function
uint32_t hms_to_seconds(int hour,int minutes,int seconds)
{
return hour * 3600 + minutes * 60 + seconds;
}
uint32_t GetSeconds(int hour_now,int minutes_now,int seconds_now,int hour_future,int minutes_future,int seconds_future)
{
uint32_t now = hms_to_seconds(hour_now,minutes_now,seconds_now);
uint32_t future = hms_to_seconds(hour_future,minutes_future,seconds_future;
// Future is not past midnight
if (now < future) {
return future - now;
}
// Future is past midnight
else {
uint32_t midnight = hms_to_seconds(24,0);
return (midnight - now) + future;
}
}
如果未来时间超过 24 小时,则此功能将不起作用,并且需要日期参数。