树莓派编写超声波模块程序

树莓派是一款基于ARM的微型电脑主板,以SD/MicroSD卡为内存硬盘,卡片主板周围有1/2/4个USB接口和一个10/100 以太网接口(A型没有网口),可连接键盘、鼠标和网线,同时拥有视频模拟信号的电视输出接口和HDMI高清视频输出接口,以上部件全部整合在一张仅比信用卡稍大的主板上,具备所有PC的基本功能只需接通电视机和键盘,就能执行如电子表格、文字处理、玩游戏、播放高清视频等诸多功能。 Raspberry Pi B款只提供电脑板,无内存、电源、键盘、机箱或连线。

我们使用树莓派进行项目开发的时候,我们首先熟悉掌握树莓派的wiringPI库,它是用于树莓派的GPIO控制函数,我们需要借用wiringPI来对我们的硬件营销操作
wiringPi下载、配置参考博文:https://blog.csdn.net/xukai871105/article/details/17737005

掌握几个基本的wiringPI库里的函数

初始化
在程序的开始的时候需要调用上面的任意的函数来对wiringpi 进行初始化,否则你的程序不能正常工作。

int wiringPISetup(void);

设置引脚电平

void pinMode(int pin,int mode)
参数说明:
pin:引脚编号(根据wiringPi的引脚说明图找到各个引脚的编号)
mode:电平设置-INPUT(输入电平)、OUTPUT(输出电平)

给指定引脚写入电平

void digitalWrite(int pin,int value)
参数说明:
pin:引脚编号
value:高低电平-HIGH(高电平)、LOW(低电平)

读取指定引脚编号

digitalRead(int pin);

首先学会掌握以上的函数,我们就可以简单实现超声波模块程序的编写

超声波模块的如何测距?
1、向 Trig 脚发送一个持续 10us 的脉冲信号。
2. 接收到树莓派发送的脉冲信号,开始发送超声波 ,并把 Echo置为高电平。 然后准备接收返回的超声波。
3. 当接收到返回的超声波时,把 Echo 置为低电平。

计算距离公式=声波速度x时间间隔(声波速度:340m/s)

#include <stdio.h>
#include <wiringPi>
#include <sys/time.h>

#define Echo 2 //将超声波模块的Echo接到引脚2
#define Trig 3 //将超声波模块的Echo接到引脚3
void chaoshengbo_init(){  //对wiringPi进行初始化

    wiringPiSetup();
    pinMode(Echo,INPUT);//将Echo电平状态设置为输入电平
    pinMode(Trig,OUTPUT);//将Trig电平状态设置为输出电平

}
void get_distance(){ //计算距离
    
    float dis;
    struct timeval t1;
    struct timeval t2;

    long start_time;
    long end_time;
    
    digitalwrite(Trig,0);
    delayMicroseconds(2); 
    digitalWrite(Trig,1);
    delayMicroseconds(10);
    digitalWrite(Trig,0);    
    while(!(digitalRead(Echo)==1));
    gettimeofday(&t1,NULL);

    while(!(digitalRead(Echo)==0));
    gettimeofday(&t2,NULL);

    start_time=t1.tv_sec*1000000+t1.tv_usec;微秒级的时间 
    end_time=t2.tv_sec*1000000+t2.tv_usec;

    dis=(float)time*0.017;
    printf("distance=%dcm\n",dis);

}

int main(){
    chaoshengbo_init();
    while(1){
        get_distance();
    }
    return 0;
}

补充:c语言如何获取时间

头文件:#include <sys/time.h>

time() 获取当前时间(以秒数表示)
struct tmgmtime(const time_ttimep); 获取当前时间和日期
int gettimeofday ( struct timeval * tv , struct timezone * tz ) 获取当前时间
char *ctime(const time_t *timep); 将时间日期以字符串格式表示
struct tm *localtime(const time_t * timep); 获取当前时间和日期并转换为本地时间
time_t mktime(strcut tm * timeptr); 将时间转换成经过的秒数
int settimeofday ( const struct timeval *tv,const struct timezone *tz); 设置当前时间戳

time_t 是一个长整型数
tm 结构体类型
timeval 包含秒和微秒的结构体

树莓派wiringPI中的延迟函数

void delay (unsigned int howLong)
void delayMicroseconds (unsigned int howLong)//延时微秒
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值