[英]How to initialize APDS-9930 ambient light / proximity sensor using ARDUINO Mega2560
我已經購買了“ 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);
}
如以上評論所討論,該問題與硬件有關。
在Arduino Mega 2560 板上 ,有兩個將SDA和SCK線(連接器上的引腳20和21)連接到+ 5V的電阻。
由於具有這些上拉電阻,因此無法直接與工作在3.3V的傳感器接口。
解決方案是添加一個電平轉換器或消除電路板上的電阻,並根據需要將其外部連接至5V或3.3V,具體取決於要連接的傳感器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.