Как при достижении определенного размера файла закрыть его и создать новый для записи
- Войдите на сайт для отправки комментариев
Пнд, 30/12/2019 - 22:36
Здравсвуйте. Возник такой вопрос у меня создается файл на SD карте,этот файл переполняется,как сделать так чтоб при заполнении(2Гб памяти) создавался новый файл и данные писались уже в нем
#include <Wire.h> #include <SPI.h> #include <SD.h> #include <TimeLib.h> // Подключаем библиотеку TimeLib #include <DS1307RTC.h> // Подключаем библиотеку DS1307RTC //--------------------------------------/// #define ADC_ref 5.0 #define analog_resolution 1024.0 //--------------------------------------/// const int chipSelect = 10; unsigned long time; int size = 0; File gFile; const int xPin = A0; const int yPin = A1; const int zPin = A2; const int XPin = A3; const int YPin = A4; const int ZPin = A5; //--------------------------------------/// const float X0 = 1.80; //значения по осям при нулевых "g"; const float Y0 = 4.10; //эти значения вы должны определить const float Z0 = 4.22; //самостоятельно (см.шаг 4) //-----------------------------------------------------------------// const float x0 = 1.77; //значения по осям при нулевых "g"; const float y0 = 1.80; //эти значения вы должны определить const float z0 = 2.13; //самостоятельно (см.шаг 4) const float sens_X = 0.03; //чувствительность по осям в В/g; const float sens_Y = 0.03; //эти значения вы должны определить const float sens_Z = 0.03; //самостоятельно (см.шаг 4) //-----------------------------------------------------------------// const float sens_x = 0.32; //чувствительность по осям в В/g; const float sens_y = 0.32; //эти значения вы должны определить const float sens_z = 0.32; //самостоятельно (см.шаг 4) void setup() { Serial.begin (9600); Serial.print("Initializing SD card... "); pinMode(SS, OUTPUT); if (!SD.begin(chipSelect)){ Serial.println("SD card not found... Try again"); while (1) ;} gFile = SD.open("glog.txt", FILE_WRITE); if (! gFile){ Serial.println("Error opening glog.csv"); while (1) ;} Serial.println("Data logging initiated"); } void loop(){ time = millis(); // Serial.println(time); /*tmElements_t tm; if (RTC.read(tm)) { Serial.print("Ok, Time = "); Serial.print(tm.Hour);//функция за вывод часов Serial.write(':'); Serial.print(tm.Minute);//функция за вывод минут Serial.write(':'); Serial.print(tm.Second);//функция за вывод секнуд Serial.print(", Date (D/M/Y) = "); Serial.print(tm.Day); Serial.write('/'); Serial.print(tm.Month); Serial.write('/'); Serial.print(tmYearToCalendar(tm.Year)); Serial.println(); } else { if (RTC.chipPresent()) { Serial.println("The DS1307 is stopped. Please run the SetTime"); Serial.println("example to initialize the time and begin running."); Serial.println(); } else { Serial.println("DS1307 read error! Please check the circuitry."); Serial.println(); } delay(9000); } // delay(1000);*/ unsigned int x = analogRead(xPin); unsigned int y = analogRead(yPin); unsigned int z = analogRead(zPin); //-------------------------------------------------// unsigned int X = analogRead(XPin); unsigned int Y = analogRead(YPin); unsigned int Z = analogRead(ZPin); float gx = (x * ADC_ref / analog_resolution - x0) / sens_x; float gy = (y * ADC_ref / analog_resolution - y0) / sens_y; float gz = (z * ADC_ref / analog_resolution - z0) / sens_z; float gX = (X * ADC_ref / analog_resolution - X0) / sens_X; float gY = (Y * ADC_ref / analog_resolution - Y0) / sens_Y; float gZ = (Z * ADC_ref / analog_resolution - Z0) / sens_Z; //------------------------------------------------------------// String getdata = (String(time)+':'); String dataaccel = (String(gx) + ',' + String(gy) + ',' + String(gz) + ':' + String(gX) + ',' + String(gY) + ',' + String(gZ) + ';'); //------------------------------------------------------------// //Serial.println(gFile.size()); gFile.print(getdata); gFile.println(dataaccel); gFile.flush(); delay(200); }
Заведите переменную file_size типа unsigned long и добавляйте к ней в самом конце вашего цикла размер записанных данных.
Получать размер файла после каждой записи в него - и проверять.
Или так, но мой метод не будет дёргать фс/читать с карты лишний раз :) Впрочем, фиг её знает эту библиотеку, может она кэширует куда размер.
А закрывать файл вообще не планируется?