首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >简单模拟读取Arduino

简单模拟读取Arduino
EN

Stack Overflow用户
提问于 2015-09-24 20:53:48
回答 1查看 903关注 0票数 2

我正试图为我的Arduino从一个红外火灾探测器模块中读取数据编写一些软件,我知道这个模块可以工作,但我无法让Arduino从它中读取数据并正确地执行一个功能。我想让它这样运作..。

代码语言:javascript
运行
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-24 22:33:42

我看到了几个问题。

第一,您使用的analogRead()函数不正确。执行analogRead()时,该函数读取在请求的引脚处看到的电压的数字表示,并返回整数值(0至1023)。此外,此函数只接受一个参数,即引脚号。您正在发送密码和HIGH。下面是一个例子,如果你想知道电压的数字表示是在那个模拟引脚上的话,你应该做些什么:

代码语言:javascript
运行
复制
int analogValue;
analogValue = analogRead(IRDetector1Input);

第二个问题是if()语句。我相信您正在尝试查看在引脚处(您的红外探测器连接的位置)接收到的值是否实际上是HIGH。首先,您的if()语句将更正确(但仍然是错误的),如下所示:

代码语言:javascript
运行
复制
if (analogRead(IRDetector1Input) == HIGH)
    digitalWrite(LEDButton, HIGH);

它仍然错误的原因是,HIGH是一个被定义为整数1的值,而LOW被定义为0。因此,您将比较analogRead()的返回值,它可能在0到1023之间,与数字1相比较。

所以..。你怎么能修好它?很难不知道你的红外探测器模块是怎么工作的。如果检测器向您的Arduino发送数字值(高电压或低电压,而不是介于两者之间的值),则使用数字函数和数字引脚(即digitalRead())。然而,如果您的IR实际上是发送一个未确定的电压,然后设置一个模拟阈值,并检查它。您将需要运行测试来确定这个阈值应该在哪里。例如:

代码语言:javascript
运行
复制
#define ANALOG_IR_THRESHOLD   750  /* Arbitrarily set */

if (analogRead(IRDetector1Input) >= ANALOG_IR_THRESHOLD)
{
    digitalWrite(LEDButton, HIGH);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32770730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档