Arduino数据记录器选择。发光二极管

时间:2017-08-31 01:22:50

标签: arduino

我试图找出如何在数据记录Arduino屏蔽上使用可选LED。我已经写了一个简单的if语句,它可以打开LED,但是当我想要它时它不会关闭。谁能帮我理解为什么?

我使用土壤湿度传感器,我希望LED在潮湿超过300时关闭。代码使用内置LED,但我试图了解可选LED的工作原理。

int led2 = 1;

void setup() {
  Serial.begin(9600);
  // open serial port, set the baud rate as 9600 bps
  pinMode(led2, OUTPUT);
}

void loop() {
  // Read data and store
  int val;
  val = analogRead(0); //connect sensor to Analog 0
  Serial.println(val); //print the value to serial port
  if(val < 301) {
    // If soil moisture is less than 301 (0-300 is dry)
    digitalWrite(led2, HIGH);
  } else  {
    digitalWrite(led2, LOW);
  }
  delay(1000);
}

1 个答案:

答案 0 :(得分:1)

传感器测量的数据本来就很嘈杂。仅仅因为你超过了一个值并不意味着所有数据点都将继续高于该值。 LED可能已关闭,但随后传感器值降至该阈值以下时再次打开。

尝试在代码中加入一个布尔值,看看是否达到了该值。 bool应该是全局的,或者在循环中用作静态。

int led2 = 10; //**DO NOT USE PINS 0 or 1!**

void setup() {
   Serial.begin(9600);
   // open serial port, set the baud rate as 9600 bps
   pinMode(led2, OUTPUT);
}

bool hitThreshold = false;

void loop() {
   // Read data and store
   int val;
   val = analogRead(0); //connect sensor to Analog 0
   Serial.println(val); //print the value to serial port
   if(val <= 300 && !hitThreshold) {
      // If soil moisture is less than 301 (0-300 is dry)
      digitalWrite(led2, HIGH);
   } else  {
      hitThreshold = true;
      digitalWrite(led2, LOW);
   }
      delay(1000);
}

如果您希望LED在一段时间后再次打开,则可以在代码中加入计时器。然后,您可以检查是否已经过了足够的时间,而不仅仅是一个简单的阈值布尔值。

您还可以实现运行平均滤波器以减少信号噪声,如discussed in this Arduino forum。玩弄它,看看它对你有用。

修改 在使用串行端口时,使用数字引脚0和1作为数字输出。 Pins 0 and 1 correspond to TX/RX。你会遇到problems!选择另一个引脚来控制可选LED。