免责声明:我已经阅读了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);
}
我进行了以下测试:
- 仅将 MUX1 连接到 SDA/SCL 共轨
- 仅将 MUX2 连接到 SDA/SCL 共轨
- 将 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。