本帖最后由 小马哥-1650185 于 2018-11-24 18:28 编辑
BH1749NUC是一种带有I2C总线接口的数字彩色传感器IC。这种集成电路感知红色、绿色、蓝色RGB)和红外线,并将它们转换成数字值,能够准确地获得环境光的照度和色温。适用于电视、手机、平板电脑LCD背光的调节。
典型电路:
封装及引脚
模块电路:
同样是IIc 接口,只需要配置寄存器,然后读取寄存器就行
寄存器列表
数据寄存器保存了RGB的数据,16bit
芯片初始化代码:
代码:
- reg = BH1749NUC_MODE_CONTROL1_VAL;
- rc = write(BH1749NUC_MODE_CONTROL1, ®, sizeof(reg));
- if (rc != 0) {
- Serial.println(F("Can't write BH1749NUC MODE_CONTROL1 register"));
- return (rc);
- }
- reg = BH1749NUC_MODE_CONTROL2_VAL;
- rc = write(BH1749NUC_MODE_CONTROL2, ®, sizeof(reg));
- if (rc != 0) {
- Serial.println(F("Can't write BH1749NUC MODE_CONTROL2 register"));
- return (rc);
- }
获取传感器颜色数据:
代码:
- byte BH1749NUC::get_rawval(unsigned char *data)
- {
- byte rc;
- rc = read(BH1749NUC_RED_DATA_LSB, data, GET_BYTE_RED_TO_GREEN2);
- if (rc != 0) {
- Serial.println(F("Can't get BH1749NUC RGB, IR and GREEN2 value"));
- }
- return (rc);
- }
- byte BH1749NUC::get_val(unsigned short *data)
- {
- byte rc;
- unsigned char val[GET_BYTE_RED_TO_GREEN2];
- rc = get_rawval(val);
- if (rc != 0) {
- return (rc);
- }
- //val[6] and val[7] are RESERVED Register Value
- data[0] = ((unsigned short)val[1] << 8) | val[0];
- data[1] = ((unsigned short)val[3] << 8) | val[2];
- data[2] = ((unsigned short)val[5] << 8) | val[4];
- data[3] = ((unsigned short)val[9] << 8) | val[8];
- data[4] = ((unsigned short)val[11] << 8) | val[10];
- return (rc);
- }
然后可以直接使用库读取
代码:
- rc = bh1749nuc.get_val(color);
读取结果如下
白色LED强光手电照射 数据基本上都是0xFFFF
漆黑环境下都是0:
下面来看下曲线分析:
再来个动图效果