开启蠕动泵继电器x间隔,以毫秒为单位

问题描述 投票:0回答:1

这是我在arduino中的第一个代码。我试图为我的花园建立一个简单的浇水自动化系统。该代码包含3个主要功能,即:

  1. 将水倒满肥料箱。
  2. 在此过程中,将假设肥料混入的水补充到水箱中的同时,向水箱中添加肥料。
  3. 要全天进行自动浇水。

对于第一和第三功能,我认为我已经完成了它(理论上是小型系统)。哈哈!

现在,对于2号肥料功能(fertilizer_PUMP()),我使用2个蠕动泵将AB肥料溶液添加到水箱中。我试图让泵以x的间隔运行,但是该功能仅运行一次,之后该继电器将不再触发。谁能帮忙并指导我缺少哪些部分?我也欢迎任何改进我代码的建议。。谢谢。

UPDATE:

对此感到困惑,我深表歉意。实际上,对于此功能,以下是我的要求。

  1. 如果顶部浮子干了,底部浮子湿了>开启蠕动泵10秒钟(或者以后会改变更多,然后停止。)>
  2. 然后,如果顶部浮球干燥而底部浮球干燥>重置。
  3. 等待下一个顶部浮子干燥和底部浮子湿。
  4. 再次感到困惑,我真的很抱歉。 Kinda以前弄乱了逻辑。

#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;

#define relayON HIGH
#define relayOFF LOW
#define floatWET HIGH
#define floatDRY LOW

const byte bottom_float = 13; //bottom position float switch
const byte top_float = 12; //top position float switch
const byte relay_topup_PUMP = 2; //Relay 1 for PUMP/Solenoid to topup water into the fertilizer tank
const byte relay_watering_PUMP = 3; //Relay 2 for scheduled watering PUMP
const byte relay_fertilizer_PUMPA = 4; //Relay 3 for Peristaltic PUMP "A" solution fertilizer
const byte relay_fertilizer_PUMPB = 5; //Relay 4 for Peristaltic PUMP "B" solution fertilizer

unsigned long previousMillis = 0;   // stores last time relay was active(on)
unsigned long fertilizer_pumpON_interval = 10000; //(10s for testing)Time to turn ON fertilizer peristaltic pump to get required EC reading
void topup_PUMP();
void watering_PUMP();
void fertilizer_PUMP();

void setup ()
{
  Serial.begin (9600);
  Wire.begin();
  //  RTC.begin();

  if (! RTC.begin())
  {
    Serial.println("Couldn't find RTC");
    while (1);
  }
  if (! RTC.isrunning())
  {
    Serial.println("RTC is NOT running!");
  }
  // following line sets the RTC to the date & time this sketch was compiled
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  // This line sets the RTC with an explicit date & time, for example to set
  // January 21, 2014 at 3am you would call:
  // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));

  pinMode (bottom_float, INPUT_PULLUP);
  pinMode (top_float, INPUT_PULLUP);
  pinMode (relay_topup_PUMP, OUTPUT);
  pinMode (relay_watering_PUMP, OUTPUT);
  pinMode (relay_fertilizer_PUMPA, OUTPUT);
  pinMode (relay_fertilizer_PUMPB, OUTPUT);

  //digitalWrite (relay_topup_PUMP, relayOFF);
  //digitalWrite (relay_watering_PUMP, relayOFF);
  digitalWrite (relay_fertilizer_PUMPA, relayOFF);
  digitalWrite (relay_fertilizer_PUMPB, relayOFF);

  DateTime now = RTC.now();
}   // end of setup

void loop ()
{
  //  topup_PUMP();
  //  watering_PUMP();
  fertilizer_PUMP();
}

//void topup_PUMP()
//{
//  if (digitalRead (top_float) == floatDRY && digitalRead (bottom_float) == floatDRY)
//  {
//    Serial.println("TOPUP PUMP ON");
//    digitalWrite(relay_topup_PUMP, relayON);
//  }
//
//  if (digitalRead (top_float) == floatWET && digitalRead (bottom_float) == floatWET)
//  {
//    Serial.println("TOPUP PUMP OFF");
//    digitalWrite(relay_topup_PUMP, relayOFF);
//  }
//  delay (1000);
//}
//
//void watering_PUMP()
//{
////  DateTime now = RTC.now();
//      Serial.print(now.hour(), DEC);
//      Serial.print(':');
//      Serial.print(now.minute(), DEC);
//      Serial.print(':');
//      Serial.print(now.second(), DEC);
//      Serial.print(' ');
//      Serial.print(now.day(), DEC);
//      Serial.print('/');
//      Serial.print(now.month(), DEC);
//      Serial.print('/');
//      Serial.print(now.year(), DEC);
//      Serial.println();
//      delay(1000);
//
//  boolean watering_PUMPstate = false;
//  if (now.hour() == 15 && now.minute() >= 38 && now.minute() < 39) watering_PUMPstate = true;    //6:00 am - 5 mins
//  if (now.hour() == 15 && now.minute() >= 40 && now.minute() < 41) watering_PUMPstate = true;  //8:30 am - 5 mins
////  if (now.hour() == 11 && now.minute() >= 0 && now.minute() < 5) watering_PUMPstate = true;  //11:00 am - 5 mins
////  if (now.hour() == 13 && now.minute() >= 30 && now.minute() < 35) watering_PUMPstate = true;  //1:30 pm - 5 mins
////  if (now.hour() == 16 && now.minute() >= 0 && now.minute() < 10) watering_PUMPstate = true;  //4:00 pm - 10 mins
//
//  if (watering_PUMPstate == true)
//  {
//    digitalWrite(relay_watering_PUMP, relayON);
//    Serial.print("\t");
//    Serial.println(F("Watering Plant"));
//    Serial.print("\t");
//    Serial.println();
//  }
//  else
//  {
//    digitalWrite(relay_watering_PUMP, relayOFF);
//  }
//}

void fertilizer_PUMP()
{
  unsigned long currentTime = millis();
  boolean fertilizer_pumpON = false;
  if ((digitalRead (top_float) == floatDRY) && (digitalRead (bottom_float) == floatWET) && (currentTime - previousMillis <= fertilizer_pumpON_interval)) //Turn on for 10s
  {
    Serial.print("\t");
    Serial.println(currentTime);
    delay (1000);
    fertilizer_pumpON = true;
  }

  if (fertilizer_pumpON == true)
  {
    Serial.print("\t");
    Serial.println(F("Adding Fertilizer A and B"));
    delay (1000);
    digitalWrite(relay_fertilizer_PUMPA, relayON);
    digitalWrite(relay_fertilizer_PUMPB, relayON);

  }
  else
  {
    digitalWrite(relay_fertilizer_PUMPA, relayOFF);
    digitalWrite(relay_fertilizer_PUMPB, relayOFF);

  }
}

这是我在arduino中的第一个代码。我试图为我的花园建立一个简单的浇水自动化系统。该代码包含3个主要功能,即:给肥料箱加水。添加...

c++ arduino relay
1个回答
0
投票

将您的currentTime和肥料_pumpON定义为全局

© www.soinside.com 2019 - 2024. All rights reserved.