【问题标题】:Simple Analog Read Arduino简单的模拟读取 Arduino
【发布时间】:2015-09-24 20:53:48
【问题描述】:

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

【问题讨论】:

    标签: arduino


    【解决方案1】:

    我发现了几个问题。

    一,是你错误地使用了analogRead()函数。当您执行analogRead() 时,该函数会读取在请求引脚上看到的电压的数字表示并返回一个整数值(0 到 1023)。此外,此函数仅接受一个参数,即引脚号。您正在发送密码和HIGH。如果您想知道该模拟引脚上电压的数字表示是什么,下面是一个示例:

    int analogValue;
    analogValue = analogRead(IRDetector1Input);
    

    第二个问题与您的if() 声明有关。我相信您正在尝试查看在引脚(连接您的 IR 检测器的位置)收到的值是否实际上是 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);
    }
    

    【讨论】:

    • 谢谢! IR 探测器只是发送一个 HIGH 或 LOW 信号,数据表显示它是 0 或 1。理论上我可以将模块添加到数字引脚,所以我可以用模拟读取代替数字读取吗?
    • 您应该可以使用if (digitalRead(IRdetector1Input) == HIGH)。而且(根据 Arduino 网站),您应该也可以在模拟引脚上使用 digitalRead……不过我从未尝试过。
    猜你喜欢
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2019-10-12
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    相关资源
    最近更新 更多