Ciao a tutti,
spero possiate aiutarmi perchè oramai ho spremuto tutto (poco) lo spremibile della mia poltiglia-grigia-separa-orecchie!
Ho collegato un Adafruit 9-DOF IMU Breakout della Adafruit al mio Arduino Uno attraverso un GPS Logging Ultimate Shield, anch'esso della Adafruit.
A parte aver "impilato" lo shield, ho collegato il pin A4 al SCL e il pin A5 al SDA dell'IMU .
Ho un problema:
se lancio la lettura del valore di accelerazione sugli assi X e Y attraverso questo codice è tutto ok:
void ReadXAcceleration(){
sensors_event_t Xaccel_event;
accel.getEvent(&Xaccel_event);
char value[6];
String finalStringXacc = "1-";
dtostrf(Xaccel_event.acceleration.x,3,2, value);
finalStringXacc += String(value);
Serial.println(finalStringXacc);
myFile = SD.open("log.txt", FILE_WRITE);
if (myFile){
myFile.println(finalStringXacc);
} else {
Serial.println("File error...");
}
myFile.close();
}
Appena cerco di leggere anche il "Roll" attraverso il seguente codice:
void ReadXAcceleration(){
sensors_event_t Xaccel_event;
accel.getEvent(&Xaccel_event);
sensors_vec_t orientation;
if (!dof.accelGetOrientation(&Xaccel_event, &orientation))
{
Serial.println("accelGetOrientation error...");
}
char value[6];
String finalStringXacc = "1-";
dtostrf(Xaccel_event.acceleration.x,3,2, value);
finalStringXacc += String(value);
char rollValue[20];
String finalStringRoll = "3-";
dtostrf(orientation.roll,3,2, rollValue);
finalStringRoll += String(rollValue);
Serial.println(finalStringXacc);
Serial.println(finalStringRoll);
myFile = SD.open("log.txt", FILE_WRITE);
if (myFile){
myFile.println(finalStringXacc);
myFile.println(finalStringRoll);
} else {
Serial.println("File error...");
}
myFile.close();
}
L'istruzione " if (myFile)" genera risposta negativa e sulla seriale viene scritto "File error...".
Queste le librerie importate, la dichiarazione delle variabili e il metodo "setup()":
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_LSM303_U.h>
#include <Adafruit_9DOF.h>
#include <SPI.h>
#include <SD.h>
//Variabili
Adafruit_9DOF dof = Adafruit_9DOF();
Adafruit_LSM303_Accel_Unified accel = Adafruit_LSM303_Accel_Unified(54321);
String firmwareVersion = "Firmware000000.ino";
File myFile;
int timeBetweenReadings = 100;
boolean readingRequested = 0;
//Costanti
//pin di CS
const int chipSelect = 10;
void setup(){
Serial.begin(9600);
//Inizializzo l'accelerometro
if(!accel.begin()){
PrintError(1);
return;
}
//Inizializzo la SD
pinMode(SS, OUTPUT);
if (!SD.begin(chipSelect)){
PrintError(2);
return;
} else {
//Se è tutto ok scrivo l'inizializzazione nel file sulla SD
//(Start e dichiarazione sensori)
InitializeLogFile();
}
Serial.println("Ready...");
}
Notare che il metodo "InitializeLogFile()" chiamato al termine della routine di Setup riesce SEMPRE a scrivere sulla SD!
Qualcuno ha qualche idea?
:0 :0 :0 :0 $) $) $) $)
![]()