簡體   English   中英

如何使用ARDUINO Mega2560初始化APDS-9930環境光/接近傳感器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM