简单的模拟读取Arduino

时间:2015-09-24 20:53:49

标签: arduino

我正在尝试为我的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);

1 个答案:

答案 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);
}