超声波+树莓派=测距

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_45380951/article/details/100074384

超声波模块配合树莓派实现测距

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 [email protected]:~		//ultra.c:需要拷贝的文件名,172.20.10.13:树莓派的IP
为啥用scp??

原因:scp可用于网络拷贝,跨电脑拷贝,但有一个前提:虚拟机与树莓派IP需桥接,在同一网段上。

3、接线,运行
在这里插入图片描述
结果

猜你喜欢

转载自blog.csdn.net/weixin_45380951/article/details/100074384
今日推荐