树莓派是一款基于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)//延时微秒