【发布时间】:2019-08-01 16:46:12
【问题描述】:
我购买了一个“APDS-9930”环境光传感器,它通过 I2C (TWI) 协议进行通信。我打算使用 ARDUINO Mega2560 开发板从中读取环境光水平。当我在网上搜索时,我发现了一个基于 APDS-9960 的修改后的 ARDUINO 库,它声称可以在 ARDUINO UNO 上使用 APDS-9930。但是,当与 Mega2560 一起使用时,它给了我“初始化错误”错误。这里有人知道如何处理这个错误吗?
我已经以多种方式使用“Wire.h”库来读取地址为 0x14 的“CH0 ADC 数据寄存器”,它保存环境电平值(根据数据表)。代码如下:
#define DUMP_REGS
#include <Wire.h>
#include <APDS9930.h>
// Global Variables
APDS9930 apds = APDS9930();
float ambient_light = 0; // can also be an unsigned long
uint16_t ch0 = 0;
uint16_t ch1 = 1;
void setup() {
//analogReference(EXTERNAL);
// Initialize Serial port
Serial.begin(9600);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("APDS-9930 - Ambient light sensor"));
Serial.println(F("--------------------------------"));
// Initialize APDS-9930 (configure I2C and initial values)
//if ( apds.init() ) {
// Serial.println(F("APDS-9930 initialization complete"));
//} else {
// Serial.println(F("Something went wrong during APDS-9930 init!"));
// }
// Start running the APDS-9930 light sensor (no interrupts)
//if ( apds.enableLightSensor(false) ) {
// Serial.println(F("Light sensor is now running"));
// } else {
// Serial.println(F("Something went wrong during light sensor init!"));
// }
#ifdef DUMP_REGS
/* Register dump */
uint8_t reg;
uint8_t val;
for(reg = 0x00; reg <= 0x19; reg++) {
if( (reg != 0x10) && \
(reg != 0x11) )
{
apds.wireReadDataByte(reg, val);
Serial.print(reg, HEX);
Serial.print(": 0x");
Serial.println(val, HEX);
}
}
apds.wireReadDataByte(0x1E, val);
Serial.print(0x1E, HEX);
Serial.print(": 0x");
Serial.println(val, HEX);
#endif
// Wait for initialization and calibration to finish
delay(500);
}
void loop() {
// Read the light levels (ambient, red, green, blue)
if ( !apds.readAmbientLightLux(ambient_light) ||
!apds.readCh0Light(ch0) ||
!apds.readCh1Light(ch1) ) {
Serial.println(F("Error reading light values"));
} else {
Serial.print(F("Ambient: "));
Serial.print(ambient_light);
Serial.print(F(" Ch0: "));
Serial.print(ch0);
Serial.print(F(" Ch1: "));
Serial.println(ch1);
}
// Wait 1 second before next reading
delay(1000);
}
【问题讨论】:
-
你用什么板针来连接传感器?
-
我在 Mega 上使用了两组 SCK 和 SDA 引脚,以及 3.3V 和 GND。还值得注意的是,使用 ID_Scanner 草图(确定连接的 I2C 模块的从机 ID),我成功找到了它的从机 ID,即 0x39。所以看起来引脚连接正确。
-
我认为您的电路板可能是 5v 逻辑,而您尝试使用的传感器是 3.3v。您是否检查过引脚 20 和 21 是否通过电阻连接到 +5v?
-
ARDUINO Mega 有 3.3V 和 5V 输出。在这种情况下,我根据数据表使用了 3.3V。不过,我不太明白你的意思。引脚 20 和 21 分别是 SDA 和 SCK。我认为这些引脚不应连接到 3.3V 或 5V。