Bonjour,
Je cherche à réaliser un programme simple pour un Arduino Nano me permettant d'inscrire des données d'un capteur 9DOF de référence ICM20480 produit par Adafruit sur une carte micro-SD grâce à un lecteur de carte, le tout en continu pendant toute la durée de prise de mesures.
Pour cela, j'ai cherché à utiliser la bibliothèque <SD.h> fournie par défaut sur Arduino IDE, et particulièrement l'exemple "NonBlockingWrite" :
#include <SD.h>
// file name to use for writing
const char filename[] = "demo.txt";
// File object to represent file
File txtFile;
// string to buffer output
String buffer;
unsigned long lastMillis = 0;
void setup() {
Serial.begin(9600);
while (!Serial);
// reserve 1kB for String used as a buffer
buffer.reserve(1024);
// set LED pin to output, used to blink when writing
pinMode(LED_BUILTIN, OUTPUT);
// init the SD card
if (!SD.begin()) {
Serial.println("Card failed, or not present");
// don't do anything more:
while (1);
}
// If you want to start from an empty file,
// uncomment the next line:
// SD.remove(filename);
// try to open the file for writing
txtFile = SD.open(filename, FILE_WRITE);
if (!txtFile) {
Serial.print("error opening ");
Serial.println(filename);
while (1);
}
// add some new lines to start
txtFile.println();
txtFile.println("Hello World!");
}
void loop() {
// check if it's been over 10 ms since the last line added
unsigned long now = millis();
if ((now - lastMillis) >= 10) {
// add a new line to the buffer
buffer += "Hello ";
buffer += now;
buffer += "\r\n";
lastMillis = now;
}
// check if the SD card is available to write data without blocking
// and if the buffered data is enough for the full chunk size
unsigned int chunkSize = txtFile.availableForWrite();
if (chunkSize && buffer.length() >= chunkSize) {
// write to file and blink LED
digitalWrite(LED_BUILTIN, HIGH);
txtFile.write(buffer.c_str(), chunkSize);
digitalWrite(LED_BUILTIN, LOW);
// remove written data from buffer
buffer.remove(0, chunkSize);
}
}
Celui-ci fonctionne à merveille et réponds parfaitement à mon besoin.
Cependant, dès que j'inclus les bibliothèques associée à mon capteur, <Adafruit_ICM20X.h> et <Adafruit_ICM20948.h>, que je définis une variable associée à ces bibliothèques, seule la partie du code incluse dans le void setup s'exécute et s'inscrit sur la carte SD tandis que la partie contenue dans le void loop ne semble pas être exécutée et n'inscrit rien de plus sur la carte.
Ci-joint une représentation du montage avec un autre accéléromètre+gyroscope afin de visualiser les branchements:
Pour précision, le lecteur de carte utilise le protocole SPI pour communiquer avec l'Arduino tandis que le ICM utilise le protocole I2C, cela pourrait-il être la cause du disfonctionnement ?
Je m'excuse d'avance pour les imprécisions et erreurs de langage, je débute en programmation sur Arduino.