树梅派硬件编程_超声波测距
Posted Leslie X徐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树梅派硬件编程_超声波测距相关的知识,希望对你有一定的参考价值。
超声波测距
测距原理
一个超声波发射,一个接收超声波返回
在发出超声波一段时间内, echo引脚保持高电平.
高电平持续的时间就是超声波从发射到返回的时间.
== 测试距离=(高电平时间 * 声速(340m/s=0.034cm/us)) / 2 ==
硬件通信
- 首先主机通过Trig引脚发送至少10us的脉冲触发信号
- 然后等待Echo信号变成高电平
- 待Echo变高电平后,进行计时(可以获取当前时间来计时)
- 待Echo变成低电平,结束计时,根据高电平时间计算距离.
实现代码
初始化
#include <stdio.h>
#include <sys/time.h>
#include <wiringPi.h>
#define PIN_TRIG 15
#define PIN_ECHO 16
void wiringPiStart(void)
{
wiringPiSetup();
pinMode(PIN_ECHO, INPUT);
pinMode(PIN_TRIG, OUTPUT);
digitalWrite(PIN_TRIG,0);
}
计算距离
float HC_getDistence(void)
{
struct timeval tv;
unsigned int start=0,end=0;
//发射10us以上的信号
digitalWrite(PIN_TRIG,1);
delayMicroseconds(10);
digitalWrite(PIN_TRIG,0);
//等待Echo高电平,获取时间
while(digitalRead(PIN_ECHO)==0);
gettimeofday(&tv,NULL);
start = tv.tv_usec;
//等待Echo低电平,获取时间
while(digitalRead(PIN_ECHO)==1);
gettimeofday(&tv,NULL);
end = tv.tv_usec;
//根据高电平持续时间计算距离
return (float)((end-start)*0.017); //单位cm
}
知识:获取时间进行计时
struct timeval
{
long tv_sec; /*秒*/
long tv_usec; /*微秒*/
};
struct timeval tv;
gettimeofday(&tv,NULL);
start = tv.tv_usec;
主函数测试
int main(int argc, char **argv)
{
wiringPiStart();
float dis=0;
dis = HC_getDistence();
printf("前方阻挡物距离为: %.2f cm\\n",dis);
return 0;
}
输出
前方阻挡物距离为: 15.30 cm
以上是关于树梅派硬件编程_超声波测距的主要内容,如果未能解决你的问题,请参考以下文章