DHT11输出一直为0,求大神解答-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4754|回复: 6

[未解决] DHT11输出一直为0,求大神解答

[复制链接]
发表于 2020-5-19 19:42 | 显示全部楼层 |阅读模式
本帖最后由 dxx012210 于 2020-5-19 21:14 编辑

自己试了两天都不行, 求大神解答一下,万分感谢!

[mw_shl_code=arduino,true]#include <dht11.h>

dht11 DHT11;
#define DHT11PIN 2
void setup(){
  Serial.begin(9600);
}

void loop(){
  Serial.println("/n");
  int chk = DHT11.read(DHT11PIN);
   Serial.print("Read sensor: ");
  switch (chk)
  {
    case DHTLIB_OK:
                Serial.println("OK");
                break;
    case DHTLIB_ERROR_CHECKSUM:
                Serial.println("Checksum error");
                break;
    case DHTLIB_ERROR_TIMEOUT:
                Serial.println("Time out error");
                break;
    default:
                Serial.println("Unknown error");
                break;
  }

  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, 2);

  Serial.print("Temperature (oC): ");
  Serial.println((float)DHT11.temperature, 2);
delay(2000);
}[/mw_shl_code]

接线

接线

错误

错误
发表于 2021-3-3 06:27 | 显示全部楼层
.sakura 发表于 2021-3-2 21:52
你好,最后怎么解决的呀?可以发个接线图吗?我也一直0,time out

换个库   
发表于 2020-5-19 21:01 | 显示全部楼层
不同的DHT11库可能使用不同的构造函数,最好参考一下示例程序
 楼主| 发表于 2020-5-19 21:13 | 显示全部楼层
秋叶秋衣 发表于 2020-5-19 21:01
不同的DHT11库可能使用不同的构造函数,最好参考一下示例程序

终于有人回复了,不知道你说的构造函数是不是这个CPP文件
[mw_shl_code=c,true]//
//    FILE: dht11.cpp
// VERSION: 0.4.1
// PURPOSE: DHT11 Temperature & Humidity Sensor library for Arduino
// LICENSE: GPL v3 (http://www.gnu.org/licenses/gpl.html)
//
// DATASHEET: http://www.micro4you.com/files/sensor/DHT11.pdf
//
// HISTORY:
// George Hadjikyriacou - Original version (??)
// Mod by SimKard - Version 0.2 (24/11/2010)
// Mod by Rob Tillaart - Version 0.3 (28/03/2011)
// + added comments
// + removed all non DHT11 specific code
// + added references
// Mod by Rob Tillaart - Version 0.4 (17/03/2012)
// + added 1.0 support
// Mod by Rob Tillaart - Version 0.4.1 (19/05/2012)
// + added error codes
//

#include "dht11.h"

// Return values:
// DHTLIB_OK
// DHTLIB_ERROR_CHECKSUM
// DHTLIB_ERROR_TIMEOUT
int dht11::read(int pin)
{
        // BUFFER TO RECEIVE
        uint8_t bits[5];
        uint8_t cnt = 7;
        uint8_t idx = 0;

        // EMPTY BUFFER
        for (int i=0; i< 5; i++) bits = 0;

        // REQUEST SAMPLE
        pinMode(pin, OUTPUT);
        digitalWrite(pin, LOW);
        delay(18);
        digitalWrite(pin, HIGH);
        delayMicroseconds(40);
        pinMode(pin, INPUT);

        // ACKNOWLEDGE or TIMEOUT
        unsigned int loopCnt = 10000;
        while(digitalRead(pin) == LOW)
                if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;

        loopCnt = 10000;
        while(digitalRead(pin) == HIGH)
                if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;

        // READ OUTPUT - 40 BITS => 5 BYTES or TIMEOUT
        for (int i=0; i<40; i++)
        {
                loopCnt = 10000;
                while(digitalRead(pin) == LOW)
                        if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;

                unsigned long t = micros();

                loopCnt = 10000;
                while(digitalRead(pin) == HIGH)
                        if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;

                if ((micros() - t) > 40) bits[idx] |= (1 << cnt);
                if (cnt == 0)   // next byte?
                {
                        cnt = 7;    // restart at MSB
                        idx++;      // next byte!
                }
                else cnt--;
        }

        // WRITE TO RIGHT VARS
        // as bits[1] and bits[3] are allways zero they are omitted in formulas.
        humidity    = bits[0];
        temperature = bits[2];

        uint8_t sum = bits[0] + bits[2];  

        if (bits[4] != sum) return DHTLIB_ERROR_CHECKSUM;
        return DHTLIB_OK;
}
//
// END OF FILE
//[/mw_shl_code]
发表于 2020-5-19 22:37 | 显示全部楼层
dxx012210 发表于 2020-5-19 21:13
终于有人回复了,不知道你说的构造函数是不是这个CPP文件
[mw_shl_code=c,true]//
//    FILE: dht11.cpp ...

你没有使用上拉电阻,而是直接将DATA接到供电了吧,这样2脚一直读到HIGH状态                              while(digitalRead(pin) == HIGH)
         if (loopCnt-- == 0) return DHTLIB_ERROR_TIMEOUT;
 楼主| 发表于 2020-5-21 10:52 | 显示全部楼层
秋叶秋衣 发表于 2020-5-19 22:37
你没有使用上拉电阻,而是直接将DATA接到供电了吧,这样2脚一直读到HIGH状态                            ...

用了上拉电阻,不过确实是线接错了,谢谢大佬解答
发表于 2021-3-2 21:52 | 显示全部楼层
dxx012210 发表于 2020-5-21 10:52
用了上拉电阻,不过确实是线接错了,谢谢大佬解答

你好,最后怎么解决的呀?可以发个接线图吗?我也一直0,time out
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 13:34 , Processed in 0.085836 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表