今天玩了下树梅派超声波检测 挺有意思的 上学时候没好好学现在工作了 唉
要还回来
超声波 模块HC-SR04 工作原理 给Trig 引脚一个10us的脉冲信号 模块开始启动发射超声波并且反射回来
#include"wiringPi.h"
#include"stdio.h"
#include"sys/time.h"
#define Trig 4 //接Pin 4
#define Echo 5 //Pin 5
void ultraInit(void)
{
pinMode(Echo,INPUT); // 定义引脚模式
pinMode(Trig,OUTPUT);
}
float disMeasure(void)
{
struct timeval tv1;
struct timeval tv2;
long start ,stop;
float dis;
digitalWrite(Trig,LOW);
delayMicroseconds(2);
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW); //发送10us的脉冲 开始启动模块
while(!(digitalRead(Echo))==1); //启动后Echo 就变成了高电平
gettimeofday(&tv1,NULL); //读取运行到这时的时间
while(!(digitalRead(Echo))==0); //接收到反射的声波后 Echo 引脚变成低电平
gettimeofday(&tv2,NULL); //读取时间
// int gettimeofday(struct timeval *tv,struct timezone *tz);
start = tv1.tv_sec * 1000000 + tv1.tv_usec;
stop = tv2.tv_sec * 1000000 + tv2.tv_usec;
dis = (float)(stop-start)/1000000*34000/2; //转换成距离 单位换算 1m 返回
return dis;
}
int main()
{
float dis;
if(wiringPiSetup()==-1) //wiringPiSetup() 初始化GPIO 必须要有
{
printf("setup fail \n");
return 1;
}
ultraInit(); //初始化GPIO 模式
while(1){
dis = disMeasure();
printf("distance : %0.2f\n",dis);
delay(1000);
}
}