zoukankan      html  css  js  c++  java
  • 树莓派练习程序(温度湿度测量)

    温度湿度模块DHT11如下图:

    树莓派的引脚如下图:

    我们将Vcc引脚连接物理接口2,DATA引脚连接物理接口40,GND引脚连接物理接口6。

    实物连接如下图:

    编程使用WiringPi库,使用wpi引脚编码方式控制GPIO。

    代码如下:

    #include <wiringPi.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef unsigned char uint8;
    typedef unsigned int  uint16;
    typedef unsigned long uint32;
    
    #define HIGH_TIME 32
    
    int pinNumber = 29;  
    uint32 databuf;
     
    
    uint8 readSensorData(void)
    {
        uint8 crc; 
        uint8 i;
     
        pinMode(pinNumber, OUTPUT); // set mode to output
        digitalWrite(pinNumber, 0); // output a high level 
        delay(25);
        digitalWrite(pinNumber, 1); // output a low level 
        pinMode(pinNumber, INPUT); // set mode to input
        pullUpDnControl(pinNumber, PUD_UP);
    
        delayMicroseconds(27);
        if (digitalRead(pinNumber) == 0) //SENSOR ANS
        {
            while (!digitalRead(pinNumber))
                ; //wait to high
    
            for (i = 0; i < 32; i++)
            {
                while (digitalRead(pinNumber))
                    ; //data clock start
                while (!digitalRead(pinNumber))
                    ; //data start
                delayMicroseconds(HIGH_TIME);
                databuf *= 2;
                if (digitalRead(pinNumber) == 1) //1
                {
                    databuf++;
                }
            }
    
            for (i = 0; i < 8; i++)
            {
                while (digitalRead(pinNumber))
                    ; //data clock start
                while (!digitalRead(pinNumber))
                    ; //data start
                delayMicroseconds(HIGH_TIME);
                crc *= 2;  
                if (digitalRead(pinNumber) == 1) //1
                {
                    crc++;
                }
            }
            return 1;
        }
        else
        {
            return 0;
        }
    }
     
    int main(void)
    {
    
        printf("Use GPIO1 to read data!
    ");
    
        if (-1 == wiringPiSetup()) {
            printf("Setup wiringPi failed!");
            return 1;
        }
     
        pinMode(pinNumber, OUTPUT); // set mode to output
        digitalWrite(pinNumber, 1); // output a high level 
    
        printf("Enter OS-------
    ");
        while (1) 
        {
            pinMode(pinNumber, OUTPUT); // set mode to output
            digitalWrite(pinNumber, 1); // output a high level 
            delay(3000);
            if (readSensorData())
            {
                printf("Congratulations ! Sensor data read ok!
    ");
                printf("RH:%d.%d
    ", (databuf >> 24) & 0xff, (databuf >> 16) & 0xff); 
                printf("TMP:%d.%d
    ", (databuf >> 8) & 0xff, databuf & 0xff);
                databuf = 0;
            }
            else
            {
                printf("Sorry! Sensor dosent ans!
    ");
                databuf = 0;
            }
        }
        return 0;
    }

    输出结果:

    参考:

    http://blog.csdn.net/liang890319/article/details/8739683

  • 相关阅读:
    Finding Action Tubes
    Modeling Video Evolution For Action Recognition
    GBrank_问题列表
    annotation code for human pose estimation
    什么是 kNN 算法?
    什么是强化学习?
    什么是张量?
    什么是遗传/进化算法?
    什么是贝叶斯网络?
    什么是机器学习?
  • 原文地址:https://www.cnblogs.com/tiandsp/p/8331256.html
Copyright © 2011-2022 走看看