首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修改Arduino灌溉项目的代码,使其不会在1次演示后终止

如何修改Arduino灌溉项目的代码,使其不会在1次演示后终止
EN

Stack Overflow用户
提问于 2022-08-04 10:16:12
回答 1查看 31关注 0票数 0

我使用的是一个arduino uno,一个土壤水分传感器和一个微型水泵,当传感器检测到水分不足时,微型水泵被激活并泵水,直到传感器记录到水分增加(例如在土壤中),这就是它应该如何工作的方式,但是当我从潮湿的土壤水中取出传感器时,我必须再次开始运行代码,这就是我需要帮助的地方,我不希望它终止,需要修改的代码如下

代码语言:javascript
复制
int relayPin = 8;
int sensor_pin = A0; // Soil Sensor input at Analog PIN A0
int output_value ;
void setup()         // put your setup code here, to run once:
{ 
  Serial.begin(9600);                 
  pinMode(relayPin, OUTPUT);
  pinMode(sensor_pin, INPUT);
  Serial.println("Reading From the Sensor ...");
  delay(2000);
}

void loop()
{
 output_value= analogRead(sensor_pin);
 output_value = map(output_value,550,10,0,100);
 Serial.print("Mositure : ");
 Serial.print(output_value);
 Serial.println("%");
 if(output_value<20){
  digitalWrite(relayPin, LOW);
 }
 else
 {
  digitalWrite(relayPin, HIGH);       
 }
 delay(1000);
}
EN

回答 1

Stack Overflow用户

发布于 2022-08-05 21:47:09

在将土壤传感器从地面移除后,当AN0模拟输入产生小于连续条件(< 20)的值时,继电器不会工作。

代码语言:javascript
复制
enum runMode {
  DEBUG,  // When the ground sensor isn't in the ground
  RELEASE // When the ground sensor is in the ground
};

int relayPin = 8;
int sensor_pin = A0;
int output_value;

/* Debug mode has been activated. */
enum runMode mode = DEBUG;

void setup() { 
  Serial.begin(9600);                 
  pinMode(relayPin, OUTPUT);
  pinMode(sensor_pin, INPUT);
  Serial.println("Reading From the Sensor ...");
  delay(2000);
}

void loop() {  
  output_value= analogRead(sensor_pin);
  output_value = map(output_value,550,10,0,100);
  Serial.println("Mositure: " + String(output_value) + "%");

  if(mode == DEBUG)
    debugMode();
  else
    releaseMode();

  delay(1000);
}

// When debug mode is active, the relay changes position at 1 second intervals
void debugMode() {
  if(digitalRead(relayPin) == HIGH) {
    digitalWrite(relayPin, LOW);  
  }
  else {
    digitalWrite(relayPin, HIGH);
  }
}

// When the release mode is active, the soil sensor must be in the ground.
void releaseMode() {
  if(output_value < 20) {
    digitalWrite(relayPin, LOW);
  }
  else {
    digitalWrite(relayPin, HIGH);       
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73234132

复制
相关文章

相似问题

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