DHT模块 接树莓派5V GND GPIO1

硬件:

树莓派 2.0

功能:读取传感器数据并打印出来

[cpp] view plain copy print?

  1. //  

  2. //mydht11.c  

  3. //  

  4. #include <wiringPi.h>  

  5. #include <stdio.h>  

  6. #include <stdlib.h>  

  7.   

  8. typedef unsigned char uint8;  

  9. typedef unsigned int  uint16;  

  10. typedef unsigned long uint32;  

  11.   

  12. #define HIGH_TIME 32  

  13.   

  14. int pinNumber =1;  //use gpio1 to read data  

  15. uint32 databuf;  

  16.    

  17.    

  18.   

  19. uint8 readSensorData(void)  

  20. {  

  21.     uint8 crc;   

  22.     uint8 i;  

  23.    

  24.     pinMode(pinNumber,OUTPUT); // set mode to output  

  25.     digitalWrite(pinNumber, 0); // output a high level   

  26.     delay(25);  

  27.     digitalWrite(pinNumber, 1); // output a low level   

  28.     pinMode(pinNumber, INPUT); // set mode to input  

  29.     pullUpDnControl(pinNumber,PUD_UP);  

  30.   

  31.     delayMicroseconds(27);  

  32.     if(digitalRead(pinNumber)==0) //SENSOR ANS  

  33.        {  

  34.          while(!digitalRead(pinNumber)); //wait to high  

  35.   

  36.       for(i=0;i<32;i++)  

  37.        {  

  38.        while(digitalRead(pinNumber)); //data clock start  

  39.        while(!digitalRead(pinNumber)); //data start  

  40.           delayMicroseconds(HIGH_TIME);  

  41.           databuf*=2;  

  42.            if(digitalRead(pinNumber)==1) //1  

  43.            {  

  44.                 databuf++;  

  45.            }  

  46.         }  

  47.   

  48.       for(i=0;i<8;i++)  

  49.        {  

  50.        while(digitalRead(pinNumber)); //data clock start  

  51.        while(!digitalRead(pinNumber)); //data start  

  52.           delayMicroseconds(HIGH_TIME);  

  53.           crc*=2;    

  54.           if(digitalRead(pinNumber)==1) //1  

  55.            {  

  56.                 crc++;  

  57.            }  

  58.         }  

  59.     return 1;  

  60.        }  

  61.    else  

  62.         {  

  63.         return 0;  

  64.          }  

  65. }  

  66.    

  67. int main (void)  

  68. {  

  69.   

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

  71.   

  72.   if (-1 == wiringPiSetup()) {  

  73.     printf("Setup wiringPi failed!");  

  74.     return 1;  

  75.   }  

  76.    

  77.   pinMode(pinNumber, OUTPUT); // set mode to output  

  78.   digitalWrite(pinNumber, 1); // output a high level   

  79.   

  80.   printf("Enter OS——-\n");  

  81.   while(1) {  

  82.     pinMode(pinNumber,OUTPUT); // set mode to output  

  83.     digitalWrite(pinNumber, 1); // output a high level   

  84.     delay(3000);  

  85.     if(readSensorData())  

  86.     {  

  87.        printf("Congratulations ! Sensor data read ok!\n");  

  88.        printf("RH:%d.%d\n",(databuf>>24)&0xff,(databuf>>16)&0xff);   

  89.        printf("TMP:%d.%d\n",(databuf>>8)&0xff,databuf&0xff);  

  90.        databuf=0;  

  91.      }  

  92.     else  

  93.      {  

  94.         printf("Sorry! Sensor dosent ans!\n");  

  95.        databuf=0;  

  96.       }  

  97.   }  

  98.   return 0;  

  99. }  


发表回复