我正试图为我的Arduino从一个红外火灾探测器模块中读取数据编写一些软件,我知道这个模块可以工作,但我无法让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);发布于 2015-09-24 22:33:42
我看到了几个问题。
第一,您使用的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);
}https://stackoverflow.com/questions/32770730
复制相似问题