Données du Shield "9 axes motion" vers carte SD

Bonjour à tous :slight_smile:

Dans le cadre d’un projet, je dois mesurer des accélérations à l’aide de l’accéléromètre du shield Arduino “9 axes motion”, et les envoyer vers une carte SD que j’ai introduite dans un autre shield, l’Ethernet 2. J’ai monté les deux shields en parallèles sur une Arduino Uno.

Voici le code ; j’ai repris le code l’exemple fourni dans l’IDE (Exemples>9 Axes Motion>Accelerometer) pour l’acquisition des données, auquel j’ajoute le code pour l’écriture sur la carte SD :

#include <SPI.h>
#include <SD.h>
#include "NAxisMotion.h"        //Contains the bridge code between the API and the Arduino Environment
#include <Wire.h>

NAxisMotion mySensor;                 //Object that for the sensor
bool updateSensorData = true;         //Flag to update the sensor data. Default is true to perform the first read before the first stream
int i=0, j=1;
int a=0;
const int taille = 10;
float tableau[taille] = {0}; 

void setup() 
{
  //Peripheral Initialization
  Serial.begin(115200);           //Initialize the Serial Port to view information on the Serial Monitor
  pinMode(10, OUTPUT);
  if (!SD.begin(4)) {            //Test initialisation carte SD
    Serial.println("initialization failed!");      
  }
  else {
    Serial.println("initialization done.");
    }

  I2C.begin();                    //Initialize I2C communication to the let the library communicate with the sensor. 
  //Sensor Initialization
  mySensor.initSensor();          //The I2C Address can be changed here inside this function in the library
  mySensor.setOperationMode(OPERATION_MODE_NDOF);   //Can be configured to other operation modes as desired
  mySensor.setUpdateMode(MANUAL);	//The default is AUTO. Changing to manual requires calling the relevant update functions prior to calling the read functions
  mySensor.updateAccelConfig();
  updateSensorData = true;
  Serial.println("C'est parti");

}

void loop()
{  
    if(i<taille-1){
       i++;
       if (updateSensorData)  //Keep the updating of data as a separate task
       {
       mySensor.updateAccel();        //Update the Accelerometer data
       mySensor.updateLinearAccel();  //Update the Linear Acceleration data
       mySensor.updateGravAccel();    //Update the Gravity Acceleration data
       mySensor.updateCalibStatus();  //Update the Calibration Status
       updateSensorData = false;
       }
       
       tableau[i]=mySensor.readAccelX();// stocke dans la i-ème case du tableau l'accélération.
       Serial.println(tableau[i]);//on l'affiche dans le moniteur pour vérifier que les mesures se font bien.
       updateSensorData = true;
      }
      
      else // i vaut alors "taille-1", toutes les cases du tableau sont remplies
      { 
        Serial.println("Ecriture");
        i=0;
        for(j=1;j<taille;j++){
          File myFile=SD.open("test.txt", FILE_WRITE);//à chaque répétition ou ouvre le fichier
          if(myFile){
            myFile.println(tableau[j]);
            myFile.close();                // on écrit et on ferme
            }
          else {
            Serial.println("Erreur");
            }
         }
         i=0; //on remet i à 0.
      }
}

Je stocke 10 valeurs d’accélérations dans un tableau, puis j’écris chaque case du tableau sur la SD. Voilà ce que j’obtiens dans le moniteur :

Après la première écriture, les données ne se mettent plus à jour alors que je bouge l’accéleromètre.
Y a-t-il un conflit entre les liaisons SPI et I2C ?
Comment écrire “en direct” les données reçus par l’accéléromètre sur la carte SD ?

Merci pour vos réponses.