查看: 3740|回复: 0
收起左侧

[项目方案] 树莓派读取温湿度传感器DHT11

2013-6-17 09:31:28 | 显示全部楼层 |阅读模式

硬件:

树莓派 2.0

DHT模块  接树莓派5V GND GPIO1 (点此购买


功能:读取传感器数据并打印出来
  1. //
  2. //mydht11.c
  3. //
  4. #include <wiringPi.h>
  5. #include <stdio.h>
  6. #include <stdlib.h>

  7. typedef unsigned char uint8;
  8. typedef unsigned int  uint16;
  9. typedef unsigned long uint32;

  10. #define HIGH_TIME 32

  11. int pinNumber =1;  //use gpio1 to read data
  12. uint32 databuf;



  13. uint8 readSensorData(void)
  14. {
  15.     uint8 crc;
  16.     uint8 i;

  17.     pinMode(pinNumber,OUTPUT); // set mode to output
  18.     digitalWrite(pinNumber, 0); // output a high level
  19.     delay(25);
  20.     digitalWrite(pinNumber, 1); // output a low level
  21.     pinMode(pinNumber, INPUT); // set mode to input
  22.     pullUpDnControl(pinNumber,PUD_UP);

  23.     delayMicroseconds(27);
  24.     if(digitalRead(pinNumber)==0) //SENSOR ANS
  25.        {
  26.          while(!digitalRead(pinNumber)); //wait to high

  27.           for(i=0;i<32;i++)
  28.            {
  29.            while(digitalRead(pinNumber)); //data clock start
  30.            while(!digitalRead(pinNumber)); //data start
  31.           delayMicroseconds(HIGH_TIME);
  32.           databuf*=2;
  33.            if(digitalRead(pinNumber)==1) //1
  34.                {
  35.                 databuf++;
  36.                }
  37.             }

  38.           for(i=0;i<8;i++)
  39.            {
  40.            while(digitalRead(pinNumber)); //data clock start
  41.            while(!digitalRead(pinNumber)); //data start
  42.           delayMicroseconds(HIGH_TIME);
  43.           crc*=2;  
  44.           if(digitalRead(pinNumber)==1) //1
  45.                {
  46.                 crc++;
  47.                }
  48.             }
  49.         return 1;
  50.        }
  51.    else
  52.         {
  53.         return 0;
  54.          }
  55. }

  56. int main (void)
  57. {

  58.   printf("Use GPIO1 to read data!\n");

  59.   if (-1 == wiringPiSetup()) {
  60.     printf("Setup wiringPi failed!");
  61.     return 1;
  62.   }

  63.   pinMode(pinNumber, OUTPUT); // set mode to output
  64.   digitalWrite(pinNumber, 1); // output a high level

  65.   printf("Enter OS-------\n");
  66.   while(1) {
  67.     pinMode(pinNumber,OUTPUT); // set mode to output
  68.     digitalWrite(pinNumber, 1); // output a high level
  69.     delay(3000);
  70.     if(readSensorData())
  71.     {
  72.        printf("Congratulations ! Sensor data read ok!\n");
  73.        printf("RH:%d.%d\n",(databuf>>24)&0xff,(databuf>>16)&0xff);
  74.        printf("TMP:%d.%d\n",(databuf>>8)&0xff,databuf&0xff);
  75.        databuf=0;
  76.      }
  77.     else
  78.      {
  79.         printf("Sorry! Sensor dosent ans!\n");
  80.        databuf=0;
  81.       }
  82.   }
  83.   return 0;
  84. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注我们,了解更多

官方微信

服务时间:10:00-16:00

13714503811

公司地址:深圳市龙岗区南湾街道东门头路8号

Copyright © 2012-2020 Powered by 树莓派论坛 2019.4  粤ICP备15075382号-1
快速回复 返回列表 返回顶部