简单的模拟读取 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);
}
我正在尝试为我的 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);
}