Arduino下读取DHT22温湿度(不使用第三方库)
2018-02-26 12:54
483 查看
代码如下:
#include <inttypes.h> /* * LED */ unsigned int LED = 13; /* * DHT22配置程序 */ unsigned int DHT_PIN = 7; #define DHT_OK 1 #define DHT_ERR_CHECK 0 #define DHT_ERR_TIMEOUT -1 float humidity; float temperature; unsigned char DHT_read() { // BUFFER TO RECEIVE unsigned char bits[5] = {0,0,0,0,0}; unsigned char cnt = 7; unsigned char idx = 0; unsigned char sum; // REQUEST SAMPLE pinMode(DHT_PIN, OUTPUT); digitalWrite(DHT_PIN, LOW); delay(18); digitalWrite(DHT_PIN, HIGH); delayMicroseconds(40); pinMode(DHT_PIN, INPUT); // ACKNOWLEDGE or TIMEOUT unsigned int count = 10000; while(digitalRead(DHT_PIN) == LOW) if (count-- == 0) return DHT_ERR_TIMEOUT; count = 10000; while(digitalRead(DHT_PIN) == HIGH) if (count-- == 0) return DHT_ERR_TIMEOUT; // READ OUTPUT - 40 BITS => 5 BYTES or TIMEOUT for (int i=0; i<40; i++) { count = 10000; while(digitalRead(DHT_PIN) == LOW) if (count-- == 0) return DHT_ERR_TIMEOUT; unsigned long t = micros(); count = 10000; while(digitalRead(DHT_PIN) == HIGH) if (count-- == 0) return DHT_ERR_TIMEOUT; if ((micros() - t) > 40) bits[idx] |= (1 << cnt); if (cnt == 0) // next byte? { cnt = 7; // restart at MSB idx++; // next byte! } else cnt--; } sum = bits[0]+bits[1]+bits[2]+bits[3]; if(bits[4] != sum) return DHT_ERR_CHECK; humidity = (float)((bits[0] << 8)+bits[1])/10; temperature = (float)((bits[2] << 8)+bits[3])/10; return DHT_OK; } void setup() { pinMode(13,OUTPUT);//指示灯 pinMode(DHT_PIN,INPUT); digitalWrite(DHT_PIN, HIGH); } void loop() { DHT_read(); Serial.print("temperature:"); Serial.println(temperature); Serial.println("============end==============="); delay(1000); digitalWrite(LED,HIGH); delay(925); //Delay digitalWrite(LED,LOW); delay(925); //Delay }
DHT22数据手册:http://www.waveshare.net/w/upload/b/be/AM2302_V1.1.pdf
相关文章推荐
- Arduino Leonardo读取DHT22温湿度传感器
- Java读取Word/Excel/PDF可以使用的第三方包
- BlackBerry 10 , BlackBerry OS 7.1 手机通过蓝牙串口读取Arduino 蓝牙传过来的温度 湿度信息
- C#下使用第三方开源控件读取Excel文件的内容
- 使用第三方ZKClient 读取Zk数据报错
- Arduino使用土壤湿度传感器
- Python中使用第三方库xlrd来读取Excel示例
- C#下使用第三方开源控件读取Excel文件的内容
- Qt中使用第三方的数据库(Sqlite)存储并读取文件本体
- Qt中使用第三方的数据库(Sqlite)存储并读取文件本体
- 使用Arduino读取水流速传感器的脉冲数
- 使用Arduino读取水位传感器数据
- 使用c语言编写程序:不允许创建第三方变量
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 使用CocoaPods安装第三方库
- 解决:Android使用自带sqlite开发时,apk中创建的数据库外部的进程是没有权限去读/写的,而且无法如何读取指定目录下的db文件
- 网易新闻iOS版 使用过的第三方开源类库
- Asp.Net中使用Newtonsoft.Json转换,读取,写入
- qrencode生成QRCode及使用ImageMagick和zbar从QRCode读取内容
- 单点登录之使用cas基于Oauth2集成第三方登录