Digital Light Sensor IC BH1751FVI
Page last updated 07 Nov 2011, by
0
replies
.
- I2C bus Interface
- 1 - 65535 lux
- 感度を0.45 - 7.36倍の間で変更可。0.11 - 100,000 luxの範囲で測定可
- 1.6x3.0mmのチップ WSOF6I 0.5mmピッチのSOP変換基板に載るが、チップ裏面に金属部分があり、サンハヤトSSP51ではパターンを削る必要があった。
- Data sheet Japanese http://www.rohm.co.jp/products/databook/sensor/pdf/bh1751fvi-j.pdf
- English http://www.rohm.com/products/databook/sensor/pdf/bh1751fvi-e.pdf
#include "mbed.h" I2C i2c(p9, p10); // sda, scl Serial pc(USBTX, USBRX); // tx, rx DigitalOut myled1(LED1); DigitalOut myled2(LED2); const int addr = 0x46; // define the I2C Address L int mode = 1, mode0; float echo, bai = 1.0; int main() { char cmd[2]; char cmdr[2]; cmd[0] = 0x01; // Power On i2c.write(addr, cmd, 1); cmd[0] = 0x07; // Reset i2c.write(addr, cmd, 1); cmd[0] = 0x42; // Typ Upper-bit i2c.write(addr, cmd, 1); cmd[0] = 0x65; // Typ Lower-bit i2c.write(addr, cmd, 1); cmd[0] = 0x10; // H-resolutiom Mode i2c.write(addr, cmd, 1); myled1 = 1; while(1) { myled2 = 1; wait(0.18); // if(mode == 0) wait(0.54); i2c.read(addr, cmdr, 2); // read the 2-byte echo result echo = ((cmdr[0] << 8) + cmdr[1]) / 1.2 * bai; mode0 = mode; if(mode == 0){ if(echo >= 6000){ mode = 2; }else if(echo >= 1000){ mode = 1; } } if(mode == 1){ if(echo < 100){ mode = 0; } if(echo >= 30000){ mode = 2; } } if(mode == 2){ if(echo < 60){ mode = 0; }else if(echo < 3000){ mode = 1; } } if(mode != mode0){ if(mode == 0){ cmd[0] = 0x47; // Max Upper-bit i2c.write(addr, cmd, 1); cmd[0] = 0x7E; // Max Lower-bit i2c.write(addr, cmd, 1); cmd[0] = 0x11; // H-resolutiom Mode2 i2c.write(addr, cmd, 1); bai = (69.0 / 254.0) / 2.0; } if(mode == 1){ cmd[0] = 0x42; // Typ Upper-bit i2c.write(addr, cmd, 1); cmd[0] = 0x65; // Typ Lower-bit i2c.write(addr, cmd, 1); cmd[0] = 0x10; // H-resolutiom Mode i2c.write(addr, cmd, 1); bai = 1.0; } if(mode == 2){ cmd[0] = 0x40; // Min Upper-bit i2c.write(addr, cmd, 1); cmd[0] = 0x7F; // Min Lower-bit i2c.write(addr, cmd, 1); cmd[0] = 0x10; // H-resolutiom Mode i2c.write(addr, cmd, 1); bai = 69.0 / 31.0; } wait(2.0); // i2c.read(addr, cmdr, 2); // read the 2-byte echo result echo = ((cmdr[0] << 8) + cmdr[1]) / 1.2 * bai; } pc.printf("light = %.2f mode = %d bai = %.2f\r\n", echo, mode, bai); myled2 = 0; wait(0.82); } }
Please log in to post comments.