超声波模块配合树莓派实现测距
1、先在虚拟机编写程序
#include<stdio.h>
#include<wiringPi.h>
#include<sys/time.h>
#define Trig 28
#define Echo 29
void ultraInit(void){
pinMode(Echo,INPUT); //pinMode()函数。
pinMode(Trig,OUTPUT);
}
float disMeasure(void){
struct timeval tv1;
struct timeval tv2;
long start,stop;
float dis;
digitalWrite(Trig,LOW);
delay(100); //亦可用delayMicroseconds()函数代替
digitalWrite(Trig,HIGH); //设置脉冲
delay(300);
digitalWrite(Trig,LOW);
while(!(digitalRead(Echo)==1));
gettimeofday(&tv1,NULL); //获取当前时间
while(!(digitalRead(Echo)==0));
gettimeofday(&tv2,NULL); //获取时间
start=tv1.tv_sec*1000000+tv1.tv_usec; //微妙级的时间,更精准
stop=tv2.tv_sec*1000000+tv2.tv_usec;
dis =(float)(stop-start)/1000000*3400/2; //求出距离
return dis;
}
int main(){
float dis;
if(wiringPiSetup()==-1){
printf("setuo wiringPi failed!");
return 1;
}
ultraInit();
while(1){
dis=disMeasure();
printf("distance = %0.2f cm\n",dis);
delay(1000);
}
return 0;
}
注:
pinMode()函数
pinMode(i,mode);
i:所要配置的引脚;
mode:设置的模式,输入INPUT、输出OPUTPUT;
digitalWrite()函数
digitalWrite(pin,value);
pin:设置的引脚;
value:输出电平,高电平HIGH,低电平LOW;
使用digitalWrite之前要讲引脚设置为OUTPUT模式;
2、拷贝到树莓派中
scp ultra.c pi@172.20.10.13:~ //ultra.c:需要拷贝的文件名,172.20.10.13:树莓派的IP
为啥用scp??
原因:scp可用于网络拷贝,跨电脑拷贝,但有一个前提:虚拟机与树莓派IP需桥接,在同一网段上。
3、接线,运行
结果