Probleme de code capteur accéléromètre gyroscope magnétomètre

bonjour a tous et a toutes, j'ai un problème avec mon code sur mon capteur LSM6DS3+LIS3MDL. L'idée étant que si le capteur bouge dans l'espace ou capte une variation de champ magnétique alors une LED s'allume. Le code suivant est je pense incomplet et ne dispose de la partie IF capteur capte alors LED s'allume. De plus avec ce code je n'observe rien sur le moniteur série (115200).

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_LIS3MDL.h>
#include <Adafruit_LSM6DS33.h>

// Créer des objets capteurs
Adafruit_LIS3MDL lis3mdl;
Adafruit_LSM6DS33 lsm6ds33;

void setup() {
  Serial.begin(115200);
  while (!Serial) delay(10); // Attendre que le port série soit disponible

  // Initialiser LIS3MDL
  if (!lis3mdl.begin_I2C()) {
    Serial.println("Échec de la détection du chip LIS3MDL");
    while (1) { delay(10); }
  }
  Serial.println("LIS3MDL détecté!");

  // Initialiser LSM6DS33
  if (!lsm6ds33.begin_I2C()) {
    Serial.println("Échec de la détection du chip LSM6DS33");
    while (1) { delay(10); }
  }
  Serial.println("LSM6DS33 détecté!");

  // Définir les plages si désiré, par défaut est +/- 4 gauss pour le magnétomètre, +/- 2 g pour l'accéléromètre, 250 dps pour le gyroscope
  lis3mdl.setRange(LIS3MDL_RANGE_4_GAUSS);
  lsm6ds33.setAccelRange(LSM6DS_ACCEL_RANGE_2_G);
  lsm6ds33.setGyroRange(LSM6DS_GYRO_RANGE_250_DPS);
}

void loop() {
  // Obtenir les données du magnétomètre
  sensors_event_t magEvent;
  lis3mdl.getEvent(&magEvent);
  Serial.print("Mag X: "); Serial.print(magEvent.magnetic.x); Serial.print(" ");
  Serial.print("Mag Y: "); Serial.print(magEvent.magnetic.y); Serial.print(" ");
  Serial.print("Mag Z: "); Serial.println(magEvent.magnetic.z);

  // Obtenir les données de l'accéléromètre et du gyroscope
  sensors_event_t accelEvent, gyroEvent, tempEvent;
  lsm6ds33.getEvent(&accelEvent, &gyroEvent, &tempEvent);
  
  Serial.print("Accel X: "); Serial.print(accelEvent.acceleration.x); Serial.print(" ");
  Serial.print("Accel Y: "); Serial.print(accelEvent.acceleration.y); Serial.print(" ");
  Serial.print("Accel Z: "); Serial.println(accelEvent.acceleration.z);

  Serial.print("Gyro X: "); Serial.print(gyroEvent.gyro.x); Serial.print(" ");
  Serial.print("Gyro Y: "); Serial.print(gyroEvent.gyro.y); Serial.print(" ");
  Serial.print("Gyro Z: "); Serial.println(gyroEvent.gyro.z);

  Serial.println();

  delay(500); // Délai pour lisibilité
}

Bonjour - postez un schéma propre de votre montage et documentez les composants utilisés (y compris quel arduino).

j'ai une arduino uno R4wifi et les branchements sont:
le noir = gnd
le rouge = 3.3V
le bleu = SDA
le jaune = SCL

C'est un arduino assez récent et il y a encore des soucis d'I2C sur cette plateforme, notamment en 3.3V

notez le commentaire sur une solution possible évoquée dans Wire clock is slow for some 3.3V devices. · Issue #69 · arduino/ArduinoCore-renesas · GitHub

je n'ai pas cette plateforme donc difficile de vous en dire plus.

1 Like