DHT11 温湿度传感器 Arduino 库

来源:互联网 发布:支付宝怎么开通淘宝 编辑:程序博客网 时间:2024/04/29 11:12

CSDN上的DHT11库,亲测能用。

源代码

////    FILE: dht11.h// 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////     URL: http://arduino.cc/playground/Main/DHT11Lib//// HISTORY:// George Hadjikyriacou - Original version// see dht.cpp file//#ifndef dht11_h#define dht11_h#if defined(ARDUINO) && (ARDUINO >= 100)#include <Arduino.h>#else#include <WProgram.h>#endif#define DHT11LIB_VERSION "0.4.1"#define DHTLIB_OK                               0#define DHTLIB_ERROR_CHECKSUM   -1#define DHTLIB_ERROR_TIMEOUT    -2class dht11{  public:    int read(int pin);    int humidity;    int temperature;};#endif//// END OF FILE//
////    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_TIMEOUTint 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[i] = 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//

示例

#include <Arduino.h>#include "DHT11.h"void setup() {  // put your setup code here, to run once:  Serial.begin(9600); //设置通讯的波特率为 9600  delay(1000); //延时 1s}void loop() {  // put your main code here, to run repeatedly:  dht11 DHT11;  if (DHTLIB_OK == DHT11.read(5))  {    Serial.print("HUMID = ");    Serial.print(DHT11.humidity);    Serial.println(" %RH");    Serial.print("TMEP = ");    Serial.print(DHT11.temperature);    Serial.println("C");  }  delay(1000); //延时 1s}
0 0
原创粉丝点击