本帖最后由 看看小小说 于 2018-3-29 08:43 编辑
ARDUINO UNO R3 SMD
DHT11的文档这里就不放上来了,只要按照时序操作没有问题,这里我硬件借助的是MICOKIT的EXT板,引脚是D8。
1.自己编写DHT11驱动。
- int temp;//温度
- int humi;//湿度
- int check;//校对码
- unsigned int time_count;
- int dat[40] = {0};
- unsigned long time;
- #define pin 8
- void setup()
- {
- // put your setup code here, to run once:
- Serial.begin(9600);
- }
- void loop()
- {
- // put your main code here, to run repeatedly:
- begin:
- delay(2000);
- //设置2号接口模式为:输出
- //输出低电平20ms(>18ms)
- //输出高电平40μs
- pinMode(pin,OUTPUT);
- digitalWrite(pin,LOW);
- delay(20);
- digitalWrite(pin,HIGH);
- delayMicroseconds(40);
- digitalWrite(pin,LOW);
- //设置2号接口模式:输入
- pinMode(pin,INPUT);
- //高电平响应信号
- time_count=10000;
- while(digitalRead(pin) != HIGH)
- {
- if(time_count-- == 0)
- {
- //如果长时间不返回高电平,输出个提示,重头开始。
- Serial.println("HIGH");
- goto begin;
- }
- }
- //低电平响应信号
- time_count = 30000;
- while(digitalRead(pin) != LOW)
- {
- if(time_count-- == 0)
- {
- // 如果长时间不返回低电平,输出个提示,重头开始。
- Serial.println("LOW");
- goto begin;
- }
- }
- //开始读取bit1-40的数值
- for(int i=0;i<40;i++)
- {
- while(digitalRead(pin) == LOW)
- {}
- //当出现高电平时,记下时间“time”
- time = micros();
- while(digitalRead(pin) == HIGH)
- {}
- //当出现低电平,记下时间,再减去刚才储存的time
- //得出的值若大于50μs,则为‘1’,否则为‘0’
- //并储存到数组里去
- if (micros() - time >50)
- {
- dat[i]=1;
- }
- else
- {
- dat[i]=0;
- }
- }
- //湿度,8位的bit,转换为数值
- humi = dat[0]*128+dat[1]*64+dat[2]*32+dat[3]*16+dat[4]*8+dat[5]*4+dat[6]*2+dat[7];
- //温度,8位的bit,转换为数值
- temp = dat[16]*128+dat[17]*64+dat[18]*32+dat[19]*16+dat[20]*8+dat[21]*4+dat[22]*2+dat[23];
- //校对码,8位的bit,转换为数值
- check = dat[32]*128 + dat[33]*64+dat[34]*32+dat[35]*16+dat[36]*8+dat[37]*4+dat[38]*2+dat[39];
- //输出:温度、湿度、校对码
- Serial.print("temp:");
- Serial.println(temp);
- Serial.print("humi:");
- Serial.println(humi);
- Serial.print("check:");
- Serial.println(check);
- }
运行结果如下
2.利用别人编好的库文件,点击下载
Dht11.zip
(3.03 KB, 下载次数: 3)
,解压文件到IDE安装路径下的libraries文件夹,将里面的example文件复制到IDE安装路径下的example文件夹,打开IDE,点击项目栏,加载库项的管理库,回自动加载刚刚加入的库和DEMO,
这时候你就可以在示例里面看到DHT11的demo,打开,修改相应管脚,下载验证即可。
运行如下:
3.OVER
|