Saludos...les comento que voy realizando un pequeño proyecto, donde estoy guardando datos cada segundo (por el momento aleatorios) en una memoria sd, haciendo uso del shield Data Logging, pasado 15 seg. hago que guarden 100 datos en memoria sd lo mas rapido posible, hasta el momento va bien hasta ahi. El problema es que llegado a los 30 seg. despues de haber iniciado el arduino, este se reinicia automaticamente y no entiendo porque. Alguien que pueda ayudarme con este problema por favor. Adjunto mi codigo.
#include <SPI.h>
#include <SdFat.h>
#include <Time.h>//libreria para fecha y hora
#include <TimeLib.h>
SdFat SD;
File dataFile;
unsigned long actual,previo=0,act,prev=0;
double variables [9]= {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
char dateReceiveBT[19],aux='+';
int punt,ref,count;
String date_time="",data_var="";
void setup() {
Serial.begin(115200);
if(!SD.begin(SS)){//Verificamos si existe Tarjeta SD
Serial.println("Tarjeta no presente o mal conectado");
while(true);
}
Serial.println("Tarjeta SD OK");
setTime(19,25,0,4,2,2018);
}
void loop() {
if(Serial.available()>0){
aux=Serial.read();
if(aux!='*'&&aux!='+'){
punt=0;
while(Serial.available()){
dateReceiveBT[punt]=Serial.read();
punt++;
delay(10);
}
for(punt=0;punt<sizeof(dateReceiveBT);punt++){
Serial.print(dateReceiveBT[punt]);
}
Serial.println();
punt=0;
}
}else{
actual = millis();
if((actual-previo)>=1000){
concTime();
date_time+=';';
for(ref=0;ref<9;ref++){
data_var+=variables[ref];
data_var+=';';
}
dataFile = SD.open("lectura.txt",FILE_WRITE);
if(dataFile){
date_time+=data_var;
dataFile.println(date_time);
dataFile.close();
}
Serial.println(date_time);
data_var="";
date_time="";
previo=millis();
}else{
act=millis();
if((act-prev)>=15000){
date_time+='*';
concTime();
date_time+='*';
for(punt=0;punt<9;punt++){
if(punt==0||punt==1){
data_var+='
;data_var+=variables[punt];//concatenamos variables
}else{
data_var+=';';//concatenamos caracter de separacion
data_var+=variables[punt];//concatenamos los valores de las variables
}
}
dataFile = SD.open("lectura.txt", FILE_WRITE);//abrimos el archivo lectura.txt
if(dataFile){
date_time+=data_var;
dataFile.println(date_time);
dataFile.close();
}
data_var="";
date_time="";
count=0;
while(count<100){
for(punt=0;punt<9;punt++){
if(punt==0||punt==1){
data_var+='
;
data_var+=variables[punt];//concatenamos variables
}else{
data_var+=';';//concatenamos caracter de separacion
data_var+=variables[punt];//concatenamos los valores de las variables
}
}
dataFile = SD.open("lectura.txt", FILE_WRITE);//abrimos el archivo lectura.txt
if(dataFile){
dataFile.println(data_var);
dataFile.close();
}
variables[0] = random(9,15)*1.0;
variables[1] = random(50,200)*1.0;
data_var="";
count++;
}
date_time="#"; //caracter final
concTime();
date_time+=';';
for(ref=0;ref<9;ref++){
data_var+=variables[punt];
data_var+=';';//concatenamos caracter de separacion
}
dataFile = SD.open("lectura.txt", FILE_WRITE);//abrimos el archivo lectura.txt
if(dataFile){//verificamos si existe el archivo en la memoria
date_time+=data_var;
dataFile.println(date_time);//guardamos el dato en la memoria
dataFile.close();//cerramos cesion con la memoria
}
data_var="";//limpiamos el contenido de data_var
date_time="";//limpiamos el contenido de date_time
aux='+';
prev=millis();
}else{
variables[0] = random(9,15)*1.0;
variables[1] = random(50,200)*1.0;
variables[2] = random(20,100)*1.0;
variables[3] = random(10,50)*1.0;
variables[4] = random(5,25)*1.0;
variables[5] = random(10,40)*1.0;
variables[6] = random(10,40)*1.0;
variables[7] = random(10,40)*1.0;
variables[8] = random(10,30)*1.0;
}
}
}
}
void concTime(){
time_t t = now();//se obtiene la hora y fecha actual del sistema segun hora y fecha de referencia
date_time+=month(t);
date_time+='/';
date_time+=day(t);
date_time+='/';//concatenamos caracter de separacion
date_time+=year(t);
date_time+=';';//concatenamos caracter de separacion
date_time+=hour(t);
date_time+=':';
date_time+=minute(t);
date_time+=':';
date_time+=second(t);
}