我正在尝试为我的Arduino编写一些软件以从IR火灾探测器模块读取数据,我知道该模块可以工作,但我无法让Arduino从中读取并正确执行功能。我希望它像这样工作......
const int IRDetector1Input = A2;
const int IRDetector1Output = A1;
const int LEDButton = 3;
void setup(){
pinMode(IRDetector1Input, INPUT);
pinMode(IRDetector1Output, OUTPUT);
pinMode(LEDButton, OUTPUT);
void loop(){ //Problem Point
if analogRead(IRDetectorInput, HIGH); //This is the problem, the code doesn't match with digital or analog write.
digitalWrite(LEDButton, HIGH);
答案 0 :(得分:0)
我看到了几个问题。
一,是你错误地使用了analogRead()
功能。当您执行analogRead()
时,该功能会读取所请求引脚上的电压数字表示,并返回一个整数值(0到1023)。此外,此功能仅采用单个参数,即引脚编号。您正在发送密码和HIGH
。下面是一个示例,如果您想知道该模拟引脚的电压数字表示该怎么做:
int analogValue;
analogValue = analogRead(IRDetector1Input);
第二个问题是您的if()
声明。我相信您正在尝试查看引脚(红外探测器所连接的位置)接收的值是否实际为HIGH
。首先,您的if()
语句会更正确(但仍然错误),如下所示:
if (analogRead(IRDetector1Input) == HIGH)
digitalWrite(LEDButton, HIGH);
它仍然是错误的原因是HIGH
是一个定义为整数1的值,而LOW
定义为0.所以,你将比较返回值analogRead()
的任何值,可以是从0到1023,到数字1。
那么......你怎么能解决它?嗯,很难说不知道你的红外探测器模块是如何工作的。如果探测器向Arduino发送数字值(高电压或低电压而不介于其中),请使用数字功能和数字引脚(即digitalRead()
)。但是,如果您的IR实际发送的电压不确定,则设置模拟阈值并检查它。您需要运行测试以确定此阈值应该在何处。例如:
#define ANALOG_IR_THRESHOLD 750 /* Arbitrarily set */
if (analogRead(IRDetector1Input) >= ANALOG_IR_THRESHOLD)
{
digitalWrite(LEDButton, HIGH);
}