简单的模拟读取 Arduino

Simple Analog Read Arduino

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

我发现了几个问题。

一,是你使用的analogRead()函数不正确。当您执行 analogRead() 时,该函数会读取在请求的引脚上看到的电压的数字表示,并且 return 是一个整数值(0 到 1023)。此外,此函数仅采用一个参数,即引脚号。您正在发送密码和 HIGH。如果您想知道该模拟引脚上电压的数字表示是什么,这里有一个示例:

int analogValue;
analogValue = analogRead(IRDetector1Input);

第二个问题与您的 if() 声明有关。我相信您正在尝试查看在引脚(连接红外检测器的位置)接收到的值是否实际上是 HIGH。首先,你的 if() 陈述会更正确(但仍然是错误的),像这样:

if (analogRead(IRDetector1Input) == HIGH)
    digitalWrite(LEDButton, HIGH);

仍然错误的原因是 HIGH 是一个定义为整数 1 的值,而 LOW 被定义为 0。因此,您将比较return analogRead() 的值,可以是 0 到 1023 之间的任何值,直到数字 1。

所以...您如何解决它?好吧,如果不知道您的红外检测器模块是如何工作的,就很难说。如果检测器向您的 Arduino 发送数字值(高电压或低电压,而不是介于两者之间的值),请使用数字功能和数字引脚(即 digitalRead())。但是,如果您的 IR 实际上发送了一个不确定的电压,则设置一个模拟阈值并检查它。您将需要 运行 测试以确定此阈值的位置。例如:

#define ANALOG_IR_THRESHOLD   750  /* Arbitrarily set */

if (analogRead(IRDetector1Input) >= ANALOG_IR_THRESHOLD)
{
    digitalWrite(LEDButton, HIGH);
}