• 大小: 4KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-05
  • 语言: C/C++
  • 标签: arduino  dht11  

资源简介

dht11库,C语言版,arduino 。。。。。。。。。。。。。。

资源截图

代码片段和文件信息

//
//    FILE: dht22.cpp
// VERSION: 0.1.00
// PURPOSE: DHT22 Temperature & Humidity Sensor library for Arduino
//
// DATASHEET: 
//
// HISTORY:
// 0.1.0 by Rob Tillaart (01/04/2011)
// inspired by DHT11 library
//

#include “dht.h“

#define TIMEOUT 10000

/////////////////////////////////////////////////////
//
// PUBLIC
//


// return values:
//  0 : OK
// -1 : checksum error
// -2 : timeout
int dht::read11(uint8_t pin)
{
// READ VALUES
int rv = read(pin);
if (rv != 0) return rv;

// CONVERT AND STORE
humidity    = bits[0];  // bit[1] == 0;
temperature = bits[2];  // bits[3] == 0;

// TEST CHECKSUM
uint8_t sum = bits[0] + bits[2]; // bits[1] && bits[3] both 0
if (bits[4] != sum) return -1;

return 0;
}

// return values:
//  0 : OK
// -1 : checksum error
// -2 : timeout
int dht::read22(uint8_t pin)
{
// READ VALUES
int rv = read(pin);
if (rv != 0) return rv;

// CONVERT AND STORE
humidity    = word(bits[0] bits[1]) * 0.1;

int sign = 1;
if (bits[2] & 0x80) // negative temperature
{
bits[2] = bits[2] & 0x7F;
sign = -1;
}
temperature = sign * word(bits[2] bits[3]) * 0.1;


// TEST CHECKSUM
uint8_t sum = bits[0] + bits[1] + bits[2] + bits[3];
if (bits[4] != sum) return -1;

return 0;
}

/////////////////////////////////////////////////////
//
// PRIVATE
//

// return values:
//  0 : OK
// -2 : timeout
int dht::read(uint8_t pin)
{
// INIT BUFFERVAR TO RECEIVE DATA
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(20);
digitalWrite(pin HIGH);
delayMicroseconds(40);
pinMode(pin INPUT);

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

loopCnt = TIMEOUT;
while(digitalRead(pin) == HIGH)
if (loopCnt-- == 0) return -2;

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

unsigned long t = micros();

loopCnt = TIMEOUT;
while(digitalRead(pin) == HIGH)
if (loopCnt-- == 0) return -2;

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

return 0;
}
//
// END OF FILE
//

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-11-25 14:00  arduino-with-temperature-humidity-DHT11_DHT22-master\
     文件        1511  2017-11-25 14:00  arduino-with-temperature-humidity-DHT11_DHT22-master\DHT.zip
     文件          87  2017-11-25 14:00  arduino-with-temperature-humidity-DHT11_DHT22-master\README.md
     文件        2467  2017-11-25 14:00  arduino-with-temperature-humidity-DHT11_DHT22-master\dht.cpp
     文件         606  2017-11-25 14:00  arduino-with-temperature-humidity-DHT11_DHT22-master\dht.h
     文件         349  2017-11-25 14:00  arduino-with-temperature-humidity-DHT11_DHT22-master\tempDHT11.ino

评论

共有 条评论