看到大二的时候有写过关于树莓派控制HC-SR04超声波测距模块的教程,当时并未给出代码(也不知道是什么原因,估计初写博客并不熟悉吧),所以在三年后的今天贴代码出来,给大家参考下。
//树莓派控制超声波传感器
//若连续进行,测量周期应该在60ms以上
//通过发射信号到收到回响信号的时间间隔可计算得到距离
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h> //提供控制GPIO接口函数
#include <unistd.h> //提供sleep()函数
int main(void)
{
int GPIO_TRIGGER=0; //TRIG触发控制信号输入
int GPIO_ECHO=1; //ECHO回响信号输出
wiringPiSetup(); //使wiringPi可以工作,并使用wiringPi Pin口
pinMode(GPIO_TRIGGER,OUTPUT); //
pinMode(GPIO_ECHO,INPUT); //
digitalWrite(GPIO_TRIGGER,0); //将TRIG设置为低电平
struct timeval tv; //
usleep(1000*500); //延迟0.5秒
digitalWrite(GPIO_TRIGGER,1); //将TRIG设置为高电平
usleep(10); //延迟10微妙(us),即提供一个10us以上的脉冲触发信号
digitalWrite(GPIO_TRIGGER,0); //将TRIG设置为高电平
gettimeofday(&tv,NULL);
unsigned int start=tv.tv_usec; //获取当前时间
while(GPIO_ECHO==0)
{
}
while(GPIO_ECHO==1)
{
//循环,若电平有高变成低,则退出
}
gettimeofday(&tv,NULL);
unsigned int stop=tv.tv_usec;//获取当前时间
unsigned int time=stop-start; //ECHO高电平时刻时间减去低电平时刻时间,所得时间为时间间隔
float dis=(time*0.0343)/(float)(2.0); //得到距离(厘米)
digitalWrite(GPIO_TRIGGER,0);
digitalWrite(GPIO_ECHO,0); //将端口清零
return 0;
}