我有一个Arduino Pro Mini 5v,16兆赫,它连接到一个数字开关在第2引脚。这个开关是用来唤醒阿杜伊诺从睡眠中使用外部数字中断。我还有一个DHT11温度传感器连接到引脚9。我想实现的是,当Arduino醒着5秒时,当pin 2上的开关很高时,我想读取温度传感器并返回温度。我正在使用Tillart的DHT11库,当我这样做时,它会返回一个TIME_OUT错误。我对此唯一可能的解释是,当DHT11和引脚2上的开关一起读取时,电压会发生变化吗?任何指向解决方案的指针都将受到极大的赞赏。谢谢。
编辑1:添加的代码
#include <LowPower.h>
#include <dht.h>
int pin2 = 2;
dht DHT;
#define DHT11_PIN 9
void pin2interrupt(void)
{
// Function called when awoken from sleep
// Detach interrupt to stop it from continuosly firing when in normal mode
}
void enterSleep(void)
{
attachInterrupt(0, pin2interrupt, HIGH);
Serial.println("Sleeping");
delay(100);
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
Serial.println("Awake!");
}
void setup()
{
Serial.begin(115200);
pinMode(pin2, INPUT);
pinMode(DHT11_PIN, INPUT);
}
int seconds = 0;
void loop()
{
delay(1000);
seconds++;
Serial.println("Awake in the loop!");
Serial.println(seconds);
if (digitalRead(pin2) == LOW && seconds == 5)
{
seconds = 0;
Serial.println("No child detected, so going to sleep!");
delay(200);
enterSleep();
}
else if (seconds == 5)
{
Serial.print("DHT11, \t");
int chk = DHT.read11(DHT11_PIN);
switch (chk)
{
case DHTLIB_OK:
Serial.print("OK,\t");
break;
case DHTLIB_ERROR_CHECKSUM:
Serial.print("Checksum error,\t");
break;
case DHTLIB_ERROR_TIMEOUT:
Serial.print("Time out error,\t");
break;
default:
Serial.print("Unknown error,\t");
break;
}
// DISPLAY DATA
Serial.println(DHT.temperature, 1);
delay(2000);
seconds = 0;
}
}编辑2:我还忘了提到我正在使用LowPower库RocketScream来让Arduino入睡。这个库可以在这里找到:https://github.com/rocketscream/Low-Power
发布于 2017-06-13 19:15:23
正如Rob在DHT11库的官方Github页面上讨论的问题部分所讨论的那样,造成这个问题的原因是,一些DHT11传感器需要更长的时间才能将数据传输回板,然后才能在数据表上指定50 As左右的数据。因此,如果遇到此问题,请尝试通过将DHTLIB_TIMEOUT值除以约400的值来增加dht头文件上的F_CPU值,然后再试一次。这使得电路板可以等待超过50毫秒的时间才能从传感器接收回数据。如果这个修复不起作用,您可能需要尝试使用示波器来测量响应时间,因为似乎有些DHT11是不同构建的。
https://stackoverflow.com/questions/42448901
复制相似问题