I am trying to use two TCA9548 multiplexers for 11 ADXL's on esp32 in two I2c ports .
I get values only for the first multiplexer with default GPIO 21(SDA) and GPIO 22(SCL). While I try for the other I2c port I do not get values for ADXLs. I am not able to figure out where the problem lies.
#include "Wire.h"
#include <SparkFun_ADXL345.h>
#define SDA_1 21
#define SCL_1 22
#define SDA_2 33
#define SCL_2 32
TwoWire I2Cone = TwoWire(0);
TwoWire I2Ctwo = TwoWire(1);
/*********** COMMUNICATION SELECTION ***********/
ADXL345 adxl1 = ADXL345();
ADXL345 adxl2 = ADXL345();
ADXL345 adxl3 = ADXL345();
ADXL345 adxl4 = ADXL345();
ADXL345 adxl5 = ADXL345();
ADXL345 adxl6 = ADXL345();
ADXL345 adxl7 = ADXL345();
ADXL345 adxl8 = ADXL345();
ADXL345 adxl9 = ADXL345();
ADXL345 adxl10 = ADXL345();
ADXL345 adxl11 = ADXL345();
#define TCAADDR1 0x70
void tcaselect_1(uint8_t bus) {
if (bus > 7) return;
Wire.beginTransmission(TCAADDR1);
Wire.write(1 << bus);
Wire.endTransmission();
}
#define TCAADDR2 0x7
void tcaselect_2(uint8_t i) {
if (i > 7) return;
I2Ctwo.beginTransmission(TCAADDR2);
I2Ctwo.write(1 << i);
I2Ctwo.endTransmission();
}
/******************** SETUP ********************/
/* Configure ADXL345 Settings */
void setup(){
Serial.begin(115200);
I2Cone.begin(SDA_1,SCL_1,400000); // SDA pin 21, SCL pin 22 TCA1
I2Ctwo.begin(SDA_2,SCL_2,400000); // SDA pin 33, SCL pin 32 TCA2
/***** MUX 1 *****/
tcaselect_1(1);
adxl1.powerOn();
adxl1.setRangeSetting(2);
tcaselect_1(2);
adxl2.powerOn();
adxl2.setRangeSetting(2);
tcaselect_1(3);
adxl3.powerOn();
adxl3.setRangeSetting(2);
tcaselect_1(4);
adxl4.powerOn();
adxl4.setRangeSetting(2);
tcaselect_1(5);
adxl5.powerOn();
adxl5.setRangeSetting(2);
tcaselect_1(6);
adxl6.powerOn();
adxl6.setRangeSetting(2);
/****** MUX 2 ********/
tcaselect_2(1);
adxl7.powerOn();
adxl7.setRangeSetting(2);
tcaselect_2(2);
adxl8.powerOn();
adxl8.setRangeSetting(2);
tcaselect_2(3);
adxl9.powerOn();
adxl9.setRangeSetting(2);
tcaselect_2(4);
adxl10.powerOn();
adxl10.setRangeSetting(2);
tcaselect_2(5);
adxl11.powerOn();
adxl11.setRangeSetting(2);
}
/****************** MAIN CODE ******************/
/* Accelerometer Readings */
void loop(){
tcaselect_1(1);
// Accelerometer Readings
int x1,y1,z1;
adxl1.readAccel(&x1, &y1, &z1); // Read the accelerometer values and store them in variables declared above x,y,z
// Output Results to Serial
Serial.print("X1: "); Serial.print(x1); Serial.print(" ");
Serial.print("y1: "); Serial.print(y1); Serial.print(" ");
Serial.print("z1: "); Serial.print(z1); Serial.print(" ");
Serial.println("m/s^2 ");
delay(500);
tcaselect_1(2);
// Accelerometer Readings
int x2,y2,z2;
adxl2.readAccel(&x2, &y2, &z2);
// Output Results to Serial
Serial.print("X2: "); Serial.print(x2); Serial.print(" ");
Serial.print("y2: "); Serial.print(y2); Serial.print(" ");
Serial.print("z2: "); Serial.print(z2); Serial.print(" ");
Serial.println("m/s^2 ");
delay(500);
tcaselect_1(3);
// Accelerometer Readings
int x3,y3,z3;
adxl3.readAccel(&x3, &y3, &z3);
// Output Results to Serial
Serial.print("X3: "); Serial.print(x3); Serial.print(" ");
Serial.print("y3: "); Serial.print(y3); Serial.print(" ");
Serial.print("z3: "); Serial.print(z3); Serial.print(" ");
Serial.println("m/s^2 ");
delay(500);
tcaselect_1(4);
// Accelerometer Readings
int x4,y4,z4;
adxl4.readAccel(&x4, &y4, &z4); // Read the accelerometer values and store them in variables declared above x,y,z
// Output Results to Serial
Serial.print("X4: "); Serial.print(x4); Serial.print(" ");
Serial.print("y4: "); Serial.print(y4); Serial.print(" ");
Serial.print("z4: "); Serial.print(z4); Serial.print(" ");
Serial.println("m/s^2 ");
delay(500);
tcaselect_1(5);
// Accelerometer Readings
int x5,y5,z5;
adxl5.readAccel(&x5, &y5, &z5);
// Output Results to Serial
Serial.print("X5: "); Serial.print(x5); Serial.print(" ");
Serial.print("y5: "); Serial.print(y5); Serial.print(" ");
Serial.print("z5: "); Serial.print(z5); Serial.print(" ");
Serial.println("m/s^2 ");
delay(500);
tcaselect_1(6);
// Accelerometer Readings
int x6,y6,z6;
adxl6.readAccel(&x6, &y6, &z6);
// Output Results to Serial
Serial.print("X6: "); Serial.print(x6); Serial.print(" ");
Serial.print("y6: "); Serial.print(y6); Serial.print(" ");
Serial.print("z6: "); Serial.print(z6); Serial.print(" ");
Serial.println("m/s^2 ");
delay(500);
//////////////////////////////////////////////////////////////
tcaselect_2(1);
// Accelerometer Readings
int x7,y7,z7;
adxl7.readAccel(&x7, &y7, &z7);
// Output Results to Serial
Serial.print("X7: "); Serial.print(x7); Serial.print(" ");
Serial.print("y7: "); Serial.print(y7); Serial.print(" ");
Serial.print("z7: "); Serial.print(z7); Serial.print(" ");
Serial.println("m/s^2 ");
delay(500);
tcaselect_2(2);
// Accelerometer Readings
int x8,y8,z8;
adxl8.readAccel(&x8, &y8, &z8);
// Output Results to Serial
Serial.print("X8: "); Serial.print(x8); Serial.print(" ");
Serial.print("y8: "); Serial.print(y8); Serial.print(" ");
Serial.print("z8: "); Serial.print(z8); Serial.print(" ");
Serial.println("m/s^2 ");
delay(500);
tcaselect_2(3);
// Accelerometer Readings
int x9,y9,z9;
adxl9.readAccel(&x9, &y9, &z9); // Read the accelerometer values and store them in variables declared above x,y,z
// Output Results to Serial
Serial.print("X9: "); Serial.print(x9); Serial.print(" ");
Serial.print("y9: "); Serial.print(y9); Serial.print(" ");
Serial.print("z9: "); Serial.print(z9); Serial.print(" ");
Serial.println("m/s^2 ");
delay(500);
tcaselect_2(4);
// Accelerometer Readings
int x10,y10,z10;
adxl10.readAccel(&x10, &y10, &z10);
// Output Results to Serial
Serial.print("X10: "); Serial.print(x10); Serial.print(" ");
Serial.print("y10: "); Serial.print(y10); Serial.print(" ");
Serial.print("z10: "); Serial.print(z10); Serial.print(" ");
Serial.println("m/s^2 ");
delay(500);
tcaselect_2(5);
// Accelerometer Readings
int x11,y11,z11;
adxl11.readAccel(&x11, &y11, &z11); // Read the accelerometer values and store them in variables declared above x,y,z
// Output Results to Serial
Serial.print("X11: "); Serial.print(x11); Serial.print(" ");
Serial.print("y11: "); Serial.print(y11); Serial.print(" ");
Serial.print("z11: "); Serial.print(z11); Serial.print(" ");
Serial.println("m/s^2 ");
delay(500);
}
I have also tried to interface 6 adxls separately with the twoWire instance but ,no luck! Please do respond