我试图找出如何在数据记录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);
}
答案 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。