超声波+树莓派=测距

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

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、接线,运行
在这里插入图片描述
结果

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值