树莓派外设开发——超声波

1.综述
树莓派外设开发需要用的wiringPi()库函数
在调用时需要包含#include<wiringPi.h>文件
使用wiringPi()库函数时需要将其初始化,方法为:调用
int wiringPiSetup();函数
编译时需要连接 -lwiringPi库函数

2.Linux中的测时方法
2.1 Linux中的struct timeval的结构体
timeval是time.h中的预定义结构体 其中包含两个一个是秒,一个是微秒
struct timeval {
__kernel_time_t tv_sec; /* seconds /
__kernel_suseconds_t tv_usec; /
microseconds */
};
2.2用 gettimeofday(&tv1, NULL);函数来获取当前的时刻
2.3 获取时间函数的具体用法

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

int main()
{

    struct timeval tv;
    gettimeofday(&tv,NULL);//获取当前时间
    printf("the sec is %ld ,the usec is %ld\n",tv.tv_sec,tv.tv_usec);


    return 0;
}

在这里插入图片描述
获得当前时间相对于某一时刻(1970年1月1日到现在的时间)的时间的微秒部分

3.超声波测距代码实现




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

#define echo 27
#define trig 28

void ultrasonicInit()
{

    pinMode(echo,INPUT);
    pinMode(trig,OUTPUT);

}

double getDistance()
{
    double dis;
    struct timeval start_tv;
    struct timeval end_tv;
    double start_time,end_time;

    //1.trig端口发送至少10us的高电平
    digitalWrite(trig,LOW);//先将trig引脚置低
    usleep(5);
    digitalWrite(trig,HIGH);//拉高
    usleep(10);//延迟10us
    digitalWrite(trig,LOW);
    //2.echo 由低电平变为高电平表示开始发生
    while(digitalRead(echo));//等待echo由低电平变为高电平

     gettimeofday(&start_tv,NULL);//获取开始发送的
     start_time = start_tv.tv_sec*1000000+start_tv.tv_usec;
     //3.echo由高电平变为低电平表示超声波遇障碍物反弹回来接收回来的时间
    gettimeofday(&end_tv,NULL);
    end_time = end_tv.tv_sec*1000000+end_tv.tv_usec;
    //4.计算距离: 距离 = 速度 * 时间 
    dis = (end_time - start_time)/1000000*34000/2;
    return dis;

    return dis;
}
int int main(int argc, char const *argv[])
{
  double distance;
  //wiringPi库的初始化
    ifwiringPiSetup() == -1{

        printf("wiringPi库的初始化失败\n");
        exit(-1);
    }
    //引脚初始化
    ultrasonicInit();


    //不断测量距离
    while(1){

       distance = getDistance();
       printf("distance = %0.2f\n",distance );
       delay(1000);

    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值