学习记录
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
错误原因
不知道,调了一晚上没调出来,感觉应该是对的。
附录
读寄存器内容
求助
有人调出来的话,还望不吝赐教。