树莓派之超声波模块之时间函数和digitalRead函数的使用

在这里插入图片描述

HC-SR004型号超声波
超声波传感器模块上面通常有两个超声波期间,一个发射,一个用于接收,电路板上有四个引脚,vcc,gnd,trig,echo.
主要参数:

  1. 工作电压和电流:5V,15mA
  2. 感测角度:不大于15°
  3. 被测物的面积不要小于50cm²并且要平整
  4. 具备温度补偿电路

原理:给Trig一个10us的TTL(高电斌),这是Trig会在空气中发一个方形波。
这时Echo会产生高电频且所持续时间就是,超声波在空气中所持续时间。
其中的函数讲解:
1.strcut timeval结构体,gettimeofday()函数
(1) struct timeval是在linux中的一个关于时间的定义,在time.h中进行定义,原型是:

struct timeval  
{  
__time_t tv_sec;        /* Seconds. */  
__suseconds_t tv_usec;  /* Microseconds. */  
}; 
tv_sec代表着秒
tv_usec代表着微妙

(2)原型为int gettimeofday(struct timeval *tv, struct timezone *tz)
用法:得到当前的时间
头文件是#include <sys/time.h>

struct timeval *tv存放着上面时间结构体的地址
struct timezone *tz得到当前的时区,一般就是NULL

2.延时函数

delay(ms)毫秒级延时函数
delayMicroseconds(us)微妙级延时函数

3.int digitalRead(int pin)函数
pin是引脚号:

作用:就是将当前引脚的电平返回HIGH/LOW,HIGH为1,LOW为0,如果当前引脚没有设置的话随机返回一个值

4.其中while();就是while(){ ;}

编程示例

#include<stdio.h>
#include<wiringPi.h>
#include<sys/time.h>

#define Trig 28
#define Echo 29

void ultraInit()
{
        pinMode(28,OUTPUT);//给Trig一个输出定义
        pinMode(29,INPUT);//给Echo一个输入用于接收

}

int  disMeasure()
{
        struct timeval val1;
        struct timeval val2;

        long start,stop;
        float dis;

        digitalWrite(Trig,LOW);//给Trig一个低电斌
        delayMicroseconds(2);//延时2秒低电平

        digitalWrite(Trig,HIGH);
        delayMicroseconds(10);    //创造一个方形波
        digitalWrite(Trig,LOW);

        while(!(digitalRead(Echo)==1));//当电平为低时,以上代码循环,到高时退出
        gettimeofday(&val1,NULL);//得到高电平开始时间

        while(!(digitalRead(Echo)==0));
        gettimeofday(&val2,NULL);

        start=val1.tv_sec*1000000+val1.tv_usec;
        stop=val2.tv_sec*1000000+val2.tv_usec;
        dis=(float)(stop-start)*34000/2000000;

        return dis;
}

int main()
{
        float dis;

        if(wiringPiSetup()==-1){
                printf("硬件初始化错误\n");
        }

        ultraInit();
        while(1){
                 dis=disMeasure();
                printf("距离是%0.2fcm\n",dis);
                delay(1000);
        }

return 0;
}    
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值