学习记录
GY-30是一款数字光模块,通过GY-30的学习,进一步掌握I2C的使用方法。
设备地址
经过查询,设备地址为0x23

GY-30管脚

addr管脚一般接低电平,此时,写操作指令为0x46,读操作指令为0x47。
指令
| 名称 | 操作码 | 作用 |
|---|---|---|
| BHAddWrite | 0x46 | 写地址 |
| BHAddRead | 0x47 | 读地址 |
| BHPowDown | 0x00 | 关闭模块 |
| BHPowOn | 0x01 | 打开模块等待指令 |
| BHReset | 0x07 | 重置数据寄存器(仅在BHpowOn模式下有效) |
| BHModeH1 | 0x10 | 高分辨率 模式1 单位 1lx 测量时间 120ms |
| BHModeH2 | 0x11 | 高分辨率 模式2 单位 0.5lx 测量时间 120ms |
| BHModeL | 0x13 | 低分辨率 单位4lx 测量时间16ms |
| BHSigModeH | 0x20 | 一次测量 高分辨率 模式1,然后转到powerdown模式 |
| BHSigModeH2 | 0x21 | 一次测量 高分辨率 模式2,然后转到powerdown模式 |
| BHSigModeL | 0x23 | 一次测量 低分辨率,然后转到powerdown模式 |
代码
/****************************************************************
> File Name: i2c_GY_30.c
> Author: admin
> Mail:
> Created Time: 2020年01月01日 星期三 19时43分51秒
> Modified Time:2020年01月01日 星期三 21时26分50秒
****************************************************************/
#include <stdlib.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>
#include <stdio.h>
#define BHAddWrite 0x46 //写地址
#define BHAddRead 0x47 //读地址
#define BHPowDown 0x00 //关闭模块
#define BHPowOn 0x01 //打开模块等待指令
#define BHReset 0x07 //重置数据寄存器仅在BHpowOn模式>
#define BHModeH1 0x10 //高分辨率 模式1 单位 11X 测量时
#define BHModeH2 0x11 //高分辨率 模式2 单位 11X 测量时
#define BHModeL 0x13 //低分辨率 单位4lx 测量时间16ms
#define BHSigModeH 0x20 //一次测量高分辨率模式1,然后转>
#define BHSigModeH2 0x21 //同上类似
#define BHSigModeL 0x23 //同上类似
int main()
{
wiringPiSetup();
int fd = wiringPiI2CSetup(0x23);
if(-1 == fd)
{
printf("wrong\n");
exit(0);
}
wiringPiI2CWriteReg8(fd, BHAddWrite, BHPowOn);
wiringPiI2CWriteReg8(fd, BHAddWrite, BHReset);
wiringPiI2CWriteReg8(fd, BHAddWrite, BHModeL);
delay(180);
short int temp = 0xff;
temp = wiringPiI2CReadReg16(fd, BHAddRead);
printf("temp = %d\n", temp);
//conversation(temp);
return 0;
}
void conversation(int temp)
{
}
运行结果
输出为0
错误原因
不知道,调了一晚上没调出来,感觉应该是对的。
附录

读寄存器内容
求助
有人调出来的话,还望不吝赐教。
768





