论坛» DIY与开源设计» 电子DIY

树莓派读取温湿度传感器DHT11

高工
2014-07-30 12:36 1楼

硬件:

树莓派 2.0

DHT模块 接树莓派5V GND GPIO1


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

  1. //
  2. //mydht11.c
  3. //
  4. #include
  5. #include
  6. #include
  7. typedefunsignedcharuint8;
  8. typedefunsignedintuint16;
  9. typedefunsignedlonguint32;
  10. #define HIGH_TIME 32
  11. intpinNumber =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. return1;
  50. }
  51. else
  52. {
  53. return0;
  54. }
  55. }
  56. intmain (void)
  57. {
  58. printf("Use GPIO1 to read data!\n");
  59. if(-1 == wiringPiSetup()) {
  60. printf("Setup wiringPi failed!");
  61. return1;
  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. return0;
  84. }
共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]