PaoloP:
Leggi la millis all'inizio del loop, leggi la millis alla fine dell'operazione che vuoi controllare, fai la differenza, la stampi con serial.print ricordandoti che il valore è in millisecondi.
Dunque ho inserito la lettura della "millis all'inizio del loop" (gentilmente puoi controllare se e' esatto cio' ce ho fatto?) cosi' in pratica misuro il tempo di campionamento del sensore e la scrittura su sd.(impostando il delay a 0) avevo circa 10 letture ogni secondo,infatti si trova con cio che mi resistuisce la millis,infatti tra una lettura e l'altra mi da circa 100ms. Volevo chiederti,c'e' un modo per ottimizzare questi tempi,in modo che arduino campioni in tempi piu brevi?La scrittura su sd dipenda anche da da quale sd sto utilizzando?Io ho una vecchia kingstone da 2gb.Se utilizzassi una di classe 10,i tempi cambierebbero?
Ecco il codice:
#include <SD.h>
#include <Wire.h>
#include "RTClib.h"
#include <SPI.h>
#include "ADXL335.h"
ADXL335 accelerometer;
RTC_DS1307 RTC;
File Dati; // La variabile di tipo file che useremo per il log
const int chipSelect =10;
String Buffer=""; // qui ci mettiamo i dati da scrivere per ogni log
unsigned long time;
void setup ()
{
Serial.begin(9600);
Wire.begin(); // inizializziamo la libreria WIRE per usare
RTC.begin(); //il Real Time clock basato su ds1307
accelerometer.begin();
if (! RTC.isrunning())
{
Serial.println("RTC NON STA FUNZIONANDO");
//LA SEGUENTE ISTRUZIONE SERVE SOLO PER REGOLARE L'OROLOGIO.ATTIVARE SOLO SE NECESSARIO.
// RTC.adjust (DateTime(__DATE__, __TIME__)); //imposta ora e data
}
Serial.print("\nSto verificando la presenza della scheda..\n");
pinMode(10, OUTPUT); // fa funzionare la sdlib
if (!SD.begin(chipSelect))
{
Serial.println("SD card non trovata");
return;
}
else
{
Serial.println("Scheda inserita e funzionante");
Serial.println();
}
}
void loop ()
{
Serial.print ("time:");
time=millis();
Buffer=""; // Nuovo giro, stringa vuota!
/* int x;
int y;
int z;*/
float ax,ay,az;
DateTime now = RTC.now(); // leggiamo l'ora
//accelerometer.getXYZ(&x,&y,&z);
accelerometer.getAcceleration(&ax,&ay,&az);
/* Buffer+=String(x);
Buffer+=",";
Buffer+=String(y);
Buffer+=",";
Buffer+=String(z);*/
// Buffer+=",";
// Buffer+=String(millis());
Buffer+=('\t');
Buffer+=String(ax);
Buffer+=" g,";
Buffer+=String(ay);
Buffer+=" g,";
Buffer+=String(az);
Buffer+=" g";
Buffer+=('\t');
Buffer +=(now.day()); // Componiamo la data AAAA/MM/GG
Buffer +=('/');
Buffer +=(now.month());
Buffer +=('/');
Buffer +=(now.year());
Buffer +=('\t');
Buffer +=(now.hour());
Buffer +=(':');
Buffer +=(now.minute());
Buffer +=(':');
Buffer +=(now.second());
Buffer +=('\t'); // tab per separare i campi
Dati = SD.open("datalog.txt", FILE_WRITE); // apriamo il file in scrittura
Serial.println(time);
if (Dati)
{
Dati.println(Buffer); // Scriviamo in un sol colpo i dati sul file
Dati.close(); // chiudiamo e trasferiamo su SD
Serial.print("Dati rilevati \t");
Serial.println(Buffer);
}
else
{
Serial.println("Errore nell'apertura di datalog.txt");
}
delay (0); // cadenza dellascrittura dei dati
}