0

免责声明:我已经阅读了https://forum.arduino.cc/t/using-two-tca9548as-to-control-16-adafruit-aht20-sensors/943438和 Adafruit 关于 MPRLS 压力传感器和TCA9548A 多路复用器。我的项目仍然存在问题。

我有 10 个 MPRLS 传感器要连接到 2 个 TCA9548A 多路复用器。目前我有 2 个传感器连接到两个多路复用器(总共四个传感器),并试图在将其他传感器添加到电路之前让它们工作。

接线:我有一对电线从 Arduino Due 的 SDA 和 SCL 引脚连接到面包板上的导轨。然后,我将每个 MUX 的 SDA 和 SCL 引脚连接到适当的导轨。然后我将一个传感器连接到 MUX1 SD0 和 SC0,另一个连接到 MUX1 SD1 和 SC1。MUX2 同上。所有 MPRLS 传感器都位于地址 0x18 并且无法更改。我通过将 A0、A1 和 A2 拉至 GND 将 MUX1 设置为 0x70,通过将 A0 拉至 5V 并将 A1 和 A2 拉至 GND 将 MUX2 设置为 0x71。

我正在使用以下代码循环遍历 TCA 地址和通道并读取压力传感器数据:

#include "Adafruit_MPRLS.h"
#include<Wire.h>
#define MPRLS_I2C_ADDRESS   0x18
#define RESET_PIN  -1
#define EOC_PIN    -1  

byte tcaI2CAddress[] = {0x70,0x71};
byte numberOfTCAs = 2;
byte numberOfDevicesPerTCA = 2;
const int numberOfDevices = 4;

Adafruit_MPRLS mpr[numberOfDevices];

void setup() {
  Wire.begin();
  Serial.begin(115200);
  
  for(int i=0; i<numberOfDevices; i++){
    mpr[i] =  Adafruit_MPRLS(MPRLS_I2C_ADDRESS);
    mpr[i] = Adafruit_MPRLS(RESET_PIN, EOC_PIN);
    setupmpr(i);
  }
}

void loop() {
  float voltage = 0.0;
  
  for(int i=0; i<numberOfDevices; i++){
    byte tca = setTCAAndChannel(i);
    voltage = mpr[i].readPressure();
    Serial.print("Pressure [  ], MPRLS No ");
    Serial.print(i);
    Serial.print(": ");
    Serial.println(voltage);
    disableTCA(tca);
  }
  Serial.println("****************************");  
  delay(1000);
}

byte setTCAAndChannel(byte i){
  byte tca = i/numberOfTCAs;
  byte channel = i%numberOfDevicesPerTCA;
  
  Wire.beginTransmission(tcaI2CAddress[tca]);
  Wire.write(1 << channel);
  Wire.endTransmission();

  return tca;
}

void disableTCA(byte tca){
  Wire.beginTransmission(tcaI2CAddress[tca]);
  Wire.write(0);
  Wire.endTransmission();  
}

void setupmpr(byte i){
  byte tca = setTCAAndChannel(i);
  
  if(!mpr[i].begin()){
    Serial.print("MPRLS No ");
    Serial.print(i);
    Serial.println(" not connected!");
  }
  disableTCA(tca); 
}

我进行了以下测试:

  1. 仅将 MUX1 连接到 SDA/SCL 共轨
  2. 仅将 MUX2 连接到 SDA/SCL 共轨
  3. 将 MUX1 和 MUX2 都连接到 SDA/SCL 共轨

测试结果如下: 测试 1(仅限 MUX1):

MPRLS No 2 not connected! 
MPRLS No 3 not connected!
Pressure [ ], MPRLS No 0: 1010.18
Pressure [ ], MPRLS No 1: 1010.63
Pressure [ ], MPRLS No 2: 21847.76
Pressure [ ], MPRLS No 3: 21847.76

MPRLS 0 和 1 读取正确,MPRLS 2 和 3 读取“默认”值,因为那里没有可读取的传感器。

测试 2(仅限 MUX2):

MPRLS No 0 not connected!
MPRLS No 1 not connected!
MPRLS No 3 not connected!
Pressure [ ], MPRLS No 0: 21847.76
Pressure [ ], MPRLS No 1: 21847.76
Pressure [ ], MPRLS No 2: 1010.47
Pressure [ ], MPRLS No 3: nan

注意: MPRLS No 3 上的传感器有故障,因此“未连接”和“nan”是预期的。忽略这一点,假装它正在收集真实的传感器数据。MPRLS 2 和 3 正在正确读取,MPRLS 0 和 1 正在读取“默认”值,因为那里没有可读取的传感器。

测试 3(MUX1 和 MUX2 一起):

MPRLS No 0 not connected!
MPRLS No 1 not connected!
MPRLS No 2 not connected!
MPRLS No 3 not connected!
Pressure [ ], MPRLS No 0: nan
Pressure [ ], MPRLS No 1: nan
Pressure [ ], MPRLS No 2: nan
Pressure [ ], MPRLS No 3: nan

突然,我没有检测到传感器,也没有读取数据。我可以拔下任何一个 MUX 并重置 Due,我将得到与上述 MUX1 或 MUX2 相同的结果(取决于仍插入哪个)。

我不确定我的接线或我的代码有什么问题来实现这一点。任何帮助/提示将不胜感激。TIA。

4

0 回答 0