SHARE
TWEET

myhome_dht

a guest Aug 23rd, 2016 177 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <wiringPi.h>
  2. #include <stdio.h>
  3. #include <stdint.h>
  4. #include <time.h>
  5.  
  6. #define DHTPIN 7
  7. #define MAXTIMING 85
  8.  
  9. int data[5] = {0,0,0,0,0};
  10. char buff[20];
  11.  
  12. int read_dht11(){
  13.  
  14.     uint8_t laststate = HIGH;
  15.     uint8_t counter = 0;
  16.     uint8_t i = 0, j = 0;
  17.     float f;
  18.  
  19.     data[0] = data[1] = data[2] = data[3] = data[4] = 0;
  20.  
  21.     pinMode(DHTPIN, OUTPUT);
  22.     digitalWrite(DHTPIN, LOW);
  23.     delay(18);
  24.     digitalWrite(DHTPIN, HIGH);
  25.     delayMicroseconds(40);
  26.     pinMode(DHTPIN, INPUT);
  27.  
  28.     for(i=0;i<MAXTIMING;i++){
  29.  
  30.         counter = 0;
  31.  
  32.         while(digitalRead(DHTPIN) == laststate){
  33.            
  34.             counter++;
  35.             delayMicroseconds(1);
  36.             if(counter == 255){
  37.                 break;
  38.             }
  39.         }
  40.  
  41.         laststate = digitalRead(DHTPIN);
  42.  
  43.         if(counter == 255){
  44.             break;
  45.         }
  46.  
  47.         if((i >= 4) && (i % 2 == 0)){
  48.             data[j/8] <<= 1;
  49.             if(counter > 16){
  50.                 data[j/8] |= 1;
  51.             }
  52.             j++;
  53.         }
  54.  
  55.     }
  56.  
  57.     if((j >= 40) && (data[4] == ((data[0] + data[1] + data[2] + data[3]) & 0xFF))){
  58.  
  59.         f = data[2] * 9. / 5. + 32;
  60.         printf("Humidity = %d.%d %%, Temperature = %d.%d *C (%.1f *F)\n",
  61.             data[0], data[1], data[2], data[3], f);
  62.        
  63.         FILE* f;
  64.         f = fopen("result.csv", "w");
  65.  
  66.         time_t now = time(NULL);
  67.         strftime(buff, 20, "%Y%m%d%H%M%S", localtime(&now));
  68.  
  69.         if(data[2] > 50){
  70.             return;
  71.         }
  72.  
  73.         fprintf(f, "%s,%d.%d,%d.%d\n", buff, data[0], data[1], data[2], data[3], f);
  74.  
  75.         fclose(f);
  76.         return 1;
  77.  
  78.     }else{
  79.         printf("failed..\n");
  80.     }
  81.  
  82.     return 0;
  83.    
  84.  
  85. }
  86.  
  87.  
  88. int main(){
  89.  
  90.     if(wiringPiSetup() == -1){
  91.         printf("error");        
  92.     }
  93.  
  94.     while(!read_dht11()){
  95.         delayMicroseconds(500 * 1000);
  96.     }
  97.  
  98. }
RAW Paste Data
Top