Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让我的arduino在特定时间完成任务_Arduino - Fatal编程技术网

让我的arduino在特定时间完成任务

让我的arduino在特定时间完成任务,arduino,Arduino,我是arduino的新手。我需要的是让他在特定的时间做点什么,然后睡觉,这样就不会过度工作 具体任务是:我希望他启动一个机制来喂养我的金鱼,所以在假期里,arduino应该工作10天或更长时间(这就是睡眠模式的原因) 在研究这个问题时,我提出了时间中断,但我认为这不是最好的解决方案,因为我希望他在特定的时间做一些事情,而不是打断他的任务 感谢您的帮助:)我喜欢@Josh使用时钟重置设备的解决方案,但是如果您的鱼不在毫秒内进食就会死亡。请使用millis()方法。它将重置后50天,但我不认为你会旅

我是arduino的新手。我需要的是让他在特定的时间做点什么,然后睡觉,这样就不会过度工作

具体任务是:我希望他启动一个机制来喂养我的金鱼,所以在假期里,arduino应该工作10天或更长时间(这就是睡眠模式的原因)

在研究这个问题时,我提出了时间中断,但我认为这不是最好的解决方案,因为我希望他在特定的时间做一些事情,而不是打断他的任务


感谢您的帮助:)

我喜欢@Josh使用时钟重置设备的解决方案,但是如果您的鱼不在毫秒内进食就会死亡。

请使用millis()方法。它将重置后50天,但我不认为你会旅行这么长时间

unsigned long hours4nextFeeding = 8;
unsigned long lastTime = millis();
void loop() {
    if(millis() > (lastTime + (hours4nextFeeding*3600*1000))) {
        feedTheFish();
        lastTime = millis();
    }
    delay(60000);
}
你也可以使用一个光传感器(超级切割器),当太阳升起的时候,每天给鱼喂食一次


我刚刚编写的代码未经测试,但您应该明白了。

我已经了解到,标准Arduino板没有节省那么多电源,因为电源调节器和USB端口(如果存在)消耗了大量电源。但是如果您使用外部时钟触发设备唤醒,那么有一个简单的arduino库,您可以使用它


Engblaze对如何自己完成这项工作有自己的见解,但如果您是arduino的新手,您可能不想跳入AVR库

您可以尝试一些简单的方法,例如每30秒启动一个持续时间为20秒的事件:

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 rtc;

void setup () {
  Serial.begin(57600);
#ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
  rtc.begin();

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
  }
}
 boolean pumpOn = false;
void loop () {
    DateTime now = rtc.now();

    if(now.second()%30==0){ pumpOn=true;}
    if(now.second()%50==0){ pumpOn=false;}
    if(pumpOn)
      Serial.println("on");
}
}
#包括
#包括“RTClib.h”
RTC_DS1307 RTC;
无效设置(){
序列号。开始(57600);
#ifdef AVR
Wire.begin();
#否则
Wire1.begin();//屏蔽I2C引脚连接到Arduino上的alt I2C总线
#恩迪夫
rtc.begin();
如果(!rtc.isrunning()){
Serial.println(“RTC未运行!”);
}
}
布尔pumpOn=false;
空循环(){
DateTime now=rtc.now();
如果(now.second()%30==0){pumpOn=true;}
如果(now.second()%50==0){pumpOn=false;}
如果(pumpOn)
序列号。打印号(“on”);
}
}

获取RTC时钟并设置报警中断。Arduinos内部时钟不是很精确,它运行的时间越长,从实际时间得到的信息就越多(不过我没有多少经验)。一种解决方案是按照建议添加RTC模块,但两者都会带来额外的问题,即首先需要通过显示器/按钮或通过以太网模块上的NTP告诉Arduino当前时间。可以帮助您评估时间和日期。尽管如此,仍有比Arduino成本更低的商用馈线可用。在我看来,这不值得这么麻烦。我链接错了图书馆。我的意思是。谢谢你们,我会研究这个RTC和定时器库。我知道有喂食器,但我想玩,自己做。:)你会使用电池还是墙壁电源?出于纯粹的好奇,如果进料器在循环的第一次运行时启动,然后进入超长倒计时,直到arduino硬件自行复位,该怎么办?一旦它自己复位,它将进入循环,馈送并重复。将消除对rtc的需要。时间会每x小时重置一次,因此内部时钟漂移会得到缓解,我无法想象金鱼需要在精确的时间进食。