树莓派使用wiringPi库读取KS102超声波模块数据(IIC通信)

树莓派版本:raspberry pi zero W
超声波模块:KS102
接口:如下图红色方框位置
在这里插入图片描述


实验步骤:

1、wiringPi的安装可以参考此处

2、安装wiringPi库之后,我们要使用其IIC接口。需要查看API方法的说明

3、查看传感器的技术文档,购买了该传感器的童鞋可以找老板要,我在这里就不发了。购买链接

最终的测试代码:

#include <stdio.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>


#define SlaveAddress 0x74
#define Address 0xe8
#define Reg 0x02
#define Command 0xB0
#define Read_high 0x02
#define Read_low 0x03

int csb_fd;

//初始化超声波
void init_csb(){
	wiringPiSetup();
	csb_fd = wiringPiI2CSetup(SlaveAddress);
	if(csb_fd > 0){
		printf("fd = %d\n", csb_fd);
	}
	else{
		printf("IIC初始化失败");
	}	
	
}
//获得数据
int getData(){
	int range;
	wiringPiI2CWrite(csb_fd, Address);
	wiringPiI2CWriteReg8(csb_fd, Reg, Command);
	delay(100);
	range = (wiringPiI2CReadReg8(csb_fd, Read_high) << 8) + wiringPiI2CReadReg8(csb_fd, Read_low);
	return range;
	
}

int main(){
	init_csb();
	for(;;){
		printf("distance : %d\n", getData());
		delay(2000);
	}
	return 0 ;
}

注意事项:

1、编译时一定要链接wiringPi库,不然会出现找不到库函数方法的错误,如下:
 undefined reference to `gertboardSPISetup'

解决方法:编译时加上-lwiringPi。

gcc csb.c -o csb -lwiringPi
2、使用printf需要等很久才打印出来,那是因为:printf函数是行缓冲式的输出,当printf遇到\n时,或者缓冲区满时,才会将缓冲区里的内容刷新到标准输出(stdout)。详情参考此处

解决方法:打印每一句话时后面加上\n,如:

printf("distance : %d\n", getData());

最终测试效果:

在这里插入图片描述

发布了42 篇原创文章 · 获赞 39 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/Hanghang_/article/details/89021287
今日推荐