首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使Arduino在规定的时间内每天执行任务?

如何使Arduino在规定的时间内每天执行任务?
EN

Stack Overflow用户
提问于 2016-08-25 14:59:06
回答 1查看 1.8K关注 0票数 2

我是个学生,对阿迪诺来说只是个新手。我正在尝试制作一个自动植物浇水系统,它应该给植物浇水两次--一次day.Is --让Arduino每天准确地完成任务,然后将自己设置为睡眠模式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-26 07:14:33

每天正好在规定的时间

  • 如果您的Arduino时钟在内部RC,您将没有足够的精确度(1%)。你的时钟将从一个月后的大约7小时开始。
  • 如果你需要一个(非常)好的精度,你可以使用一个RTC模块(2 2ppm)。你的时钟将从大约5秒后的一个月。
  • 或者,您可以简单地使用millis()函数,在Xtal振荡器(200 may )上应该足够精确。你的时钟将从大约10分钟后的一个月。

我将从最后一个解决方案开始,因为它不需要额外的组件,并且需要改进RTC。

然后将自己设置为睡眠模式。

AVR核心有不同的睡眠水平,一些将保持时钟(空闲),应该与millis()解决方案一起使用,另一些将不会保持时钟(电源下降),但更高的功耗效率,可以用于RTC。解决办法取决于你需要的功率有多低。注意,由于电源调节器和其他组件,Arduino板和IDE无法实现最大低功耗。要实现Atmega328数据表中描述的200 To睡眠,需要做一些工作。

millis()示例

代码语言:javascript
运行
复制
#define INTERVAL_1_DAY 86400000  // 1day => 24*60*60*1000

unsigned long nextDate = INTERVAL_1_DAY;  

void loop()
{
    unsigned long currentDate = millis(); //millis rollover (overflow) after about 50 days

    if(currentDate > nextDate  // time elapsed, do action
       && currentDate < (nextDate + INTERVAL_25_DAY)) //treatement of the overflow of millis() and *Dates ...
    {
        nextDate += INTERVAL_1_DAY;  //you have to use nextDate here and not current date like in some examples to have no sweep (some µs each day)

        // do your action here
    }

    // you may add some idle sleep here 
    // 10s sleep would give a execution date glitch e.g. [3pm to 3pm+10s]
    // but some code can fix this
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39148633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档