De arduino à excel

Bonjour/bonsoir,
J’espère être au bon endroit pour de l’arduino

Je possède actuellement un MPU 6050 (capteur accel/gyro) pour ma carte arduino et je souhaite faire des relevés d’accélération, tout ce passe sans soucis jusqu’à l’écriture sur ma carte SD.

l’objectif : Créer un fichier excel (csv) depuis arduino qui contient toutes les données relevées à chaque temps t
pour le relevé et la création du fichier tout ce passe bien :

#include <SPI.h>
#include <SD.h>
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"

MPU6050 accelgyro;
int16_t ax, ay, az;
int16_t gx, gy, gz;
int aX;

//#define OUTPUT_READABLE_ACCELGYRO

#define OUTPUT_BINARY_ACCELGYRO

#define LED_PIN 13
bool blinkState = false;


File myFile;

void setup() {
          Wire.begin();

    // verification des connexions
    Serial.println("Test du gyroscope/accel...");
    Serial.println(accelgyro.testConnection() ? "MPU6050 connexion réussie" : "MPU6050 connexion échouée");

  // Port de communication (moniteur série):
  Serial.begin(9600);
  while (!Serial) {
    ; // Attente de la connexion au port série
  }


  Serial.print("Initialisation de la carte SD...");

  if (!SD.begin(4)) {
    Serial.println("initialisation échouée!");
    return;
  }
  Serial.println("initialisation réussie.");

   // configure Arduino LED pin for output
    pinMode(LED_PIN, OUTPUT);


  
// Création du fichier (si besoin)
// ouverture du fichier:
  myFile = SD.open("accX.txt", FILE_WRITE);
// fermeture du fichier:
  myFile.close();
  Serial.println("done.");
}



void loop() {
 // Lecture des données du gyroscope/accel
    accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
    aX=ax;
      // Ouverture du fichier, un seul à la fois
  myFile = SD.open("accX.csv", FILE_WRITE);

  // Si le fichier s'ouvre, alors on écrit:
  if (myFile) {
    Serial.print("Ecriture accX.csv...");
    myFile.println(Serial.println(ax));
    // Fermeture du fichier:
    myFile.close();
    Serial.println("done.");
  } else {
    // Si le fichier ne s'ouvre pas, afficher :
    Serial.println("Erreur d'ouverture du fichier");
  }

}

Le moniteur série nous confirme l’écriture sur le fichier, le fichier est bien créer donc jusqu’ici tout est OK

Cependant, le problème est qu’il ne contient que des chiffres aléatoires (par exemple une centaine de cases remplie avec “0” ou “7”)
Seriez vous remedier à ce problème ? Je sens que je suis tout proche…

J’en profite pour demander, est-ce possible de toujours réinisialiser le fichier excel à chaque fois (dans le setup) pour avoir un fichier vierge à chaque relevé ?

Un grand merci à vous !
Grégoire.

vous faites: myFile.println([color=red]Serial.println[/color](ax)); → vous écrivez dans votre fichier ce que retourne la fonction Serial.println()… pensez vous que ce soit ce que vous voulez?

pour l’autre question, dans le setup() testez si le fichier existe et si oui détruisez le

Moi, je remplacerais :

    myFile.println(Serial.println(ax));

par :

    Serial.println(ax)
    myFile.println(ax);

Je ne sais pas (pas regardé ) si la fonction Serial.println() retourne une valeur ; peut-être un code d'erreur.

Cordialement.

Pierre

Pour avoir un fichier vierge, essayez de remplacer "FILE_WRITE" par "O_WRITE | O_CREAT"

Cordialement.

Pierre

fallait pas donner la solution.... :)

ChPr: Je ne sais pas (pas regardé ) si la fonction Serial.println() retourne une valeur ; peut-être un code d'erreur.

Serial.println() retourne le nombre d'octets transférés au port série

J-M-L: fallait pas donner la solution.... :) ...

C'est vrai que d'habitude je dis plutôt ce qu'il faudrait faire que de donner la solution. Une tite faiblesse ;)

Cordialement.

Pierre

:)

Juste une précision au passage :

Créer un fichier excel (csv)

Cette affirmation a du faire dresser des cheveux sur la tête.

Le format csv n'est pas une création Excel, Excel [u]a du[/u] l'adopter parce que c'est un standard de l'industrie.

Et puis si on pouvait parler en terme générique de "tableur" ce serait mieux sachant qu'Excel est une copie de "Lotus 123", lui même une copie de Visicalc.

en fait le CSV c'est souvent la m**de pour les tableurs surtout si on est français et qu'on a des float (nombre décimaux)

Le format CSV présente entre autres inconvénients d'être interprété par Microsoft Excel comme étant au format anglais (séparateur de colonnes : virgule ; séparateur de décimales : point) ou français de France (séparateur de colonnes : point-virgule ; séparateur de décimales : virgule) en fonction de l'origine du fichier : sur disque, par HTTP, support amovible Le format SYLK présente l'avantage d'être un format texte et d'être indépendant de la langue de Microsoft Excel (anglais, français…). Il peut intégrer des formules mathématiques simples et contrôler certaines propriétés des cellules. De plus, les cellules du tableur peuvent être remplies dans le désordre. Une alternative est le XML pour l'import sur un logiciel tableur comme Microsoft Excel.

(source Wikipedia)

son historique remonte à Fortran sur IBM sous OS/360 en 1972 (cf in english)

surtout si on est français et qu'on a des float (nombre décimaux)

Non pas de difficultés majeures . 1) Sélection de la plage de nombre 2) outil "chercher/remplacer" - Chercher -> le point - Remplacer -> la virgule

Cela ne prend pas de 10 secondes Et puis ce n'est pas la faute du format csv, si les langage de programmation utilisaient la virgule comme en Europe ce serait plus simple.

Le format SYLK présente l'avantage d'être un format texte et d'être indépendant de la langue de Microsoft Excel (anglais, français…).

Il n'y a pas que Microsoft dans la vie. Heureusement d'ailleurs car si on avait attendu qu'il invente le tableur on en serait encore au boulier.

C’est pas de moi hein - c’est Wikipedia