Problème communication MLX90393 et TCA9548A

Bonjour,

Je cherche à mesurer le champ magnétique créé par des bobines avec des MLX90393 (CJMCU-90393), j'ai besoin d'avoir ce champ à plusieurs endroits donc j'utilise un multiplexeur TCA9548A. Cependant je n'arrive pas récupérer les valeurs du champ avec le mux... Le capteur fonctionne très bien sans, et j'arrive à lire chaque bus du mux sans le capteur.

Voici mon code:

#include <Adafruit_MLX90393.h>
#include <Wire.h>
#define Addr_MUX 0x70
#define Addr_cap 0x0C
#define Addr_xyz 0x3E
#define Addr_xyz_RM 0x4E

Adafruit_MLX90393 Sensor;

//initialise la communicaiton série et le capteur
void setup(){
  Serial.begin(9600);
  Wire.begin();
  //Sensor.begin_I2C();
  //Sensor.begin();
  Serial.print("Bz");
  Serial.print("\t");
  Serial.print("By");
  Serial.print("\t");
  Serial.print("Bx");
  Serial.print("\t");
  Serial.println("mT");
}
void TCAselect (uint8_t i){
  if (i>7) return;
  Wire.beginTransmission(Addr_MUX);
  Wire.write(i>>1);
  Wire.endTransmission();
}


void readB(uint8_t bus){
  TCAselect(bus);
  unsigned int data[7];
  Wire.beginTransmission(Addr_cap);
  Wire.write(Addr_xyz);
  Wire.endTransmission();

  Wire.requestFrom(Addr_cap, 1);
  if (Wire.available()==1){
    unsigned int c = Wire.read();
  }delay(50);

  Wire.beginTransmission(Addr_cap);
  Wire.write(Addr_xyz_RM);
  Wire.endTransmission();

  Wire.requestFrom(Addr_cap, 7);
  if (Wire.available()==7){
    for (int i = 0; i<=7; i++){
      data[i]=Wire.read();
    }
  }
// récupération des données en bits
  int X_mag = data[1] * 256 + data[2];
  int Y_mag = data[3] * 256 + data[4];
  int Z_mag = data[5] * 256 + data[6];
//  int T = data[7] * 256 + data[8];

// calibration datas en u.SI
  float X_mes = abs(X_mag / 3534.3);
  float Y_mes = abs(Y_mag / 3534.3);
  float Z_mes = abs(Z_mag / 3534.3);

  String(data_mes) = String(X_mes);
  String(str2) = String(Y_mes);
  String(str3) = String(Z_mes);

  data_mes.concat("\t" + str2 + "\t" + str3);
  Serial.println(data_mes);
  delay(10); 
}
void loop(){
  readB(0);
  delay(500);
}

Et voici le schéma électrique:

Le seul résultat que j'obtient dans la console Arduino est celui-ci:

Merci d'avance :slight_smile:

Bonjour,
A mon avis c'est Wire.write(1 << i) qu'il faut faire

1 Like

Merci... Du coup je me sent un peu bête la ^^'.
Du coup ça marche, mais c'est quoi la différence?

>> décalage vers la droite
<< décalage vers la gauche
1 Like