Go Down

Topic: Arduino Uno, lecture de l’accéléromètre LIS2DW12 (Read 653 times) previous topic - next topic

Lucduino

Bonjour,

J'ai comme matériel Arduino Uno avec un shield Nucleo-IKS01A3  et je souhaiterai juste lire les données de accéléromètre. Pour le code j'utilise les librairies STM32duino LIS2DW12 et STM32duino_X_NUCLEO_IKS01A3, mais il semblerait que ces librairies ne soit pas adaptées pour arduino. comment je peux adapter ces librairies? ou mon code?

Voila mon code ci dessous tiré d'un exemple de la librairie STM32duino_X_NUCLEO_IKS01A3:
Code: [Select]

#include <X-NUCLEO-IKS01A3.h>
#include <LIS2DW12Sensor.h>
#include <lis2dw12_reg.h>
#include <Wire.h>
#include <I2C.h>


#ifdef ARDUINO_SAM_DUE
#define DEV_I2C Wire1
#elif defined(ARDUINO_ARCH_STM32)
#define DEV_I2C Wire
#elif defined(ARDUINO_ARCH_AVR)
#define DEV_I2C Wire
#else
#define DEV_I2C Wire
#endif
#define SerialPort Serial

// Components

LIS2DW12Sensor *Acc2;

void setup() {
// Led.
pinMode(LED_BUILTIN, OUTPUT);

// Initialize serial for output.
SerialPort.begin(115200);
Serial.println("init...");

// Initialize I2C bus.
DEV_I2C.begin();
Serial.println("init I2C");



Acc2=new LIS2DW12Sensor (&DEV_I2C);
Serial.println("try to enable");
Acc2->Enable_X();
Serial.println("X enable");

}

void loop() {
// Led blinking.
digitalWrite(LED_BUILTIN, HIGH);
delay(250);
digitalWrite(LED_BUILTIN, LOW);
delay(250);

//Read accelerometer
int32_t accelerometer2[3];
memset(accelerometer2, 0, 3);
Acc2->Get_X_Axes(accelerometer2);



// Output data.
SerialPort.print("\n | Acc[mg]: ");
SerialPort.print(accelerometer2[0]);
SerialPort.print(" ");
SerialPort.print(accelerometer2[1]);
SerialPort.print(" ");
SerialPort.print(accelerometer2[2]);
}


Merci en avance pour vos réponses

J-M-L

lisez comment utiliser le forum (les posts épinglés en haut du forum comme "Bien éditer son post pour les nuls" , "Faire un Nouveau Sujet ou le corriger avec les Balises..." et "Règles du forum francophone"), et faites un post "propre" SVP...
====+====+=====

Quote
il semblerait que ces librairies ne soit pas adaptées pour arduino
euh qu'estce Qui vous fait incriminer la librairie dont l'auteur précise sur github  Arduino library to support the LIS2DW12 3D accelerometer plutôt que votre code ou montage ...


Sinon votre attente active pour blink vous bloque une demi seconde pour chaque loop() vous n'allez pas lire votre composant souvent

D'autre part
Code: [Select]
//Read accelerometer
 int32_t accelerometer2[3];
 memset(accelerometer2, 0, 3);
 Acc2->Get_X_Axes(accelerometer2);
ne met pas à 0 les 3 long int du tableau mais seulement les 3 premiers octets avant d'appeler Get_X_Axes(). (Mais ce n'est pas votre souci, il n'y a pas besoin d'initialiser le tableau avant appel puisque la fonction appelée vous dit si ça s'est bien passé et dans ce cas elle a initialisé le tableau)

Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Lucduino

Merci pour ta réponse ! tout d'abord je suis nouveau faut m'excuser mais j'en tiens compte pour la suite merci !

Le code étant tiré de leur exemple et utilisant leur librairies ne fonctionne pas. Je devine donc que ça viens d'eux.

Je n'ai pas bien compris la remarque sur l'initialisation mais il est fortement possible que ça vienne de la en effet étant donné que le retour dans le moniteur est fixe et nul.

Lucduino

J'ai réussi à faire fonctionner l'exemple de la librairie. Cependant les valeurs acquises sont fixes et nulles. J'ai donc essayé de lire aux adresses de l'accéléromètre (0x18 et 0x19) j'obtiens des valeurs non nulle mais fixe.

Voila le code avec la fonction IO_Read:

Code: [Select]
#include <X-NUCLEO-IKS01A3.h>
#include <LIS2DW12Sensor.h>
#include <lis2dw12_reg.h>
#include <Wire.h>
#include <I2C.h>


#ifdef ARDUINO_SAM_DUE
#define DEV_I2C Wire1
#elif defined(ARDUINO_ARCH_STM32)
#define DEV_I2C Wire
#elif defined(ARDUINO_ARCH_AVR)
#define DEV_I2C Wire
#else
#define DEV_I2C Wire
#endif
#define SerialPort Serial

// Components

LIS2DW12Sensor *Acc2;


void setup() {
  // Led.
  pinMode(LED_BUILTIN, OUTPUT);

  // Initialize serial for output.
  SerialPort.begin(115200);
  Serial.println("init...");
 
  // Initialize I2C bus.
  DEV_I2C.begin();
  Serial.println("init I2C");
 

 
  Acc2=new LIS2DW12Sensor (&DEV_I2C);
  Serial.println("try to enable");
 
  Acc2->Enable_X();
  Serial.println("X enable");
 
 
}

void loop() {
  // Led blinking.
  digitalWrite(LED_BUILTIN, HIGH);
  delay(250);
  digitalWrite(LED_BUILTIN, LOW);
  delay(250);
  uint8_t addr;
  uint16_t Byte;

  //Read accelerometer
  uint8_t accelerometer2[3];
  memset(accelerometer2, 0, 3);
  //Acc2->Get_X_Axes(accelerometer2);
  addr= (uint8_t)(0x19);
  Byte= (uint16_t)(3);

  Acc2->IO_Read(accelerometer2,addr,Byte);




  // Output data.
  SerialPort.print("\n | Acc[mg]: ");
  SerialPort.print(accelerometer2[0]);
  SerialPort.print(" ");
  SerialPort.print(accelerometer2[1]);
  SerialPort.print(" ");
  SerialPort.print(accelerometer2[2]);

}


j'attend du code qu'il me retourne des valeurs évolutives en fonction de l'accélération appliquée au shield. Des idées ? je suis preneur.

Merci d'avance

J-M-L

Quote
J'ai réussi à faire fonctionner l'exemple de la librairie. Cependant les valeurs acquises sont fixes et nulles
Vous êtes sûr que tout est bien branché?
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Lucduino


J-M-L

Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Lucduino

C'est bien ça ! je ne comprend par car le code exemple pour accéléromètre LSM6DSO fonctionne mais pas celui pour l'accéléromètre LIS2DW12. Cela viendrai d'un problème hardware ?

J-M-L

Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Lucduino

J'en suis sur, je vois pas pourquoi un accéléromètre marcherai et pas l'autre.

Go Up