在原先传感器电路上接一个LED用输出,扫样频率为何会变慢
2015-01-258546
AI 快速预览详细 收起
本文讨论了在使用Arduino UNO板和BH1750光照度传感器进行光照度判断时,添加LED输出后扫样频率变慢的问题。通过检查程序中的I2C通信延迟时间和优化代码逻辑,成功解决了该问题。文章还提供了详细的故障排查步骤和解决方案,帮助读者恢复原有的扫样频率。
急向各路大神求助!!
【目的】手上有一块Arduino UNO板,一个BH1750型光照度传感器,准备使用它进行基本的光照度判断等操作。
【问题】
如题,原先传感器电路(下图中不含虚线矩形框的部分)能够正常工作,扫样频率为135ms/次,并按照这个频率在串口监视器上显示出数据。
当我附加了一个LED作输出信号时(if光亮度大于某值就会发光),在程序中并没有新添delay等其他有关时间的语句,
电路能正常工作,但是无论是串口监视器上的数据,还是Arduino板子上的TX小灯,出现/闪光频率都有很明显的降低。
( ⊙ o ⊙ )啊!因为是在做一个关于 预警引发光敏性癫痫的光 有关的课题,如果扫样频率太低的话等预警结果判定出来患者早就发作了……真心挺困扰的。
希望各路大神们能看一下到底出了什么问题,不胜感谢!!
预祝各位羊年快乐!!
【以下为接线图例与程序】
- #include <Wire.h>
- #include <math.h>
- int BH1750address = 0x23;//BH1750 I2C地址
- byte buff[2];
- int led = 5;
-
-
- void setup()
- {
- Wire.begin();
- Serial.begin(9600);
- pinMode(led,OUTPUT);
- }
- void loop()
- {
-
- if( BH1750() > 80)
- {
- digitalWrite(led,HIGH);
- }
- else
- {
- digitalWrite(led, LOW);
- }
-
- Serial.print( BH1750() );
- Serial.println("[lx]");
-
- }
- double BH1750() //BH1750设备操作
- {
- int i=0;
- double val=0;
- //开始I2C读写操作
- Wire.beginTransmission(BH1750address);
- Wire.write(0x10);//1lx reolution 120ms//发送命令
- Wire.endTransmission();
- delay(135);
- //读取数据
- Wire.beginTransmission(BH1750address);
- Wire.requestFrom(BH1750address, 2);
- while(Wire.available()) //
- {
- buff = Wire.read(); // receive one byte
- i++;
- }
- Wire.endTransmission();
- if(2==i)
- {
- val=((buff[0]<<8)|buff[1])/1.2;
- }
- return val;
- }
复制代码
|
【咱是不是跑偏了;P】