Buenas noches, tengo un código que lo hice viendo algunos ejemplos y editando ciertas cosas que se adecuen a mi proyecto.
Este código guarda las mediciones de un acelerómetro en un archivo dentro de la tarjeta SD, el problema es que me genera un archivo para cada lectura del loop y lo que yo quiero es que en cada archivo me guarde lecturas de aceleraciones de unos 10 minutos por ejemplo y no lectura por lectura.
//MONITORIZACION LOW COST
#include <SD.h>
#include <Wire.h>
#include "RTClib.h"
File myFile;
int frec_muestreo = 100; // frecuencia de muestreo(Hz)
RTC_DS1307 rtc;
char nombreDia[7][12] = {"Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"};
char nombreMes[12][12]= {"Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"};
int segundo,minuto,hora,dia,mes,diaDeLaSemana;
long anio; //variable año
DateTime HoraFecha;
unsigned long start;
void setup()
{
Serial.begin(9600);
Serial.print("Iniciando SD ...");
if (!SD.begin(4)) {
Serial.println("No se pudo inicializar");
return;
}
Serial.println("inicializacion exitosa");
rtc.begin(); //Inicializamos el RTC
rtc.adjust(DateTime(2019,8,1,17,11,0));//2019,Agosto,1,17 h,11 min,0 seg
//Empiezo con este nombre
}
void loop()
{
char nombrefichero[]="LOGGER00.txt";
for (byte i = 0; i < 100; i ++){
nombrefichero[6] = i/10 + '0';
nombrefichero[7] = i%10 + '0';
//Si no existe la combinación actual como nombre de fichero…
if (!SD.exists(nombrefichero)) {
//…creo el nuevo fichero con esa combinación como nombre
myFile = SD.open(nombrefichero, FILE_WRITE);
break; //…y no sigo probando de crear ningún fichero más
}
}
if (myFile != 0){
float zero_x = 2.172;
float zero_y = 2.167;
float zero_z = 2.039;
float sensitivity = 0.3;
float voltaje = 3.3;
float amplitude = 512;
Serial.print("Escribiendo SD: ");
float x = ((float) analogRead(0)*(voltaje/amplitude)-zero_x)/(sensitivity);
float y = ((float) analogRead(1)*(voltaje/amplitude)-zero_y)/(sensitivity);
float z = ((float) analogRead(2)*(voltaje/amplitude)-zero_z)/(sensitivity);
HoraFecha = rtc.now(); //obtenemos la hora y fecha actual
segundo=HoraFecha.second();
minuto=HoraFecha.minute();
hora=HoraFecha.hour();
dia=HoraFecha.day();
mes=HoraFecha.month();
anio=HoraFecha.year();
diaDeLaSemana=HoraFecha.dayOfTheWeek();
myFile.print(hora);
myFile.print(":");
myFile.print(minuto);
myFile.print(":");
myFile.print(segundo);
myFile.print(" , ");
myFile.print(nombreDia[diaDeLaSemana]);
myFile.print(" ");
myFile.print(dia);
myFile.print(" de ");
myFile.print(nombreMes[mes-1]);
myFile.print(" del ");
myFile.print(anio);
myFile.print(", x=");
myFile.print(x);
myFile.print(", y=");
myFile.print(y);
myFile.print(", z=");
myFile.println(z);
myFile.close(); //cerramos el archivo
//Enviamos por el puerto serie la hora y fecha.
Serial.print(hora);
Serial.print(":");
Serial.print(minuto);
Serial.print(":");
Serial.print(segundo);
Serial.print(" , ");
Serial.print(nombreDia[diaDeLaSemana]);
Serial.print(" ");
Serial.print(dia);
Serial.print(" de ");
Serial.print(nombreMes[mes-1]);
Serial.print(" del ");
Serial.print(anio);
Serial.print(", x=");
Serial.print(x);
Serial.print(", y=");
Serial.print(y);
Serial.print(", z=");
Serial.println(z);
} else {
Serial.println("Error al abrir el archivo");
}
delay(1/(frec_muestreo*0.001));
}
0508.ino (4.39 KB)