Как установить атрибуты для SD-файлов?
Как установить атрибуты файла, например, дату создания, для файла, создаваемого на SD-карте?
@KC Tucker, 👍3
2 ответа
Лучший ответ:
Библиотека Arduino SDоснована на Github: greiman / SdFatУильяма Греймана.
Из SD-карты созданы атрибуты файла:
Базовая библиотека SD.h не устанавливает атрибуты. Вы заметили, что все имеет одну и ту же дату создания? У библиотеки нет никакого способа узнать, какая сегодня дата.
Однако вам необходимо использовать функцию обратного вызова. Следующая информация взята из даты и времени создания файла на SD-карте?:
Установите библиотеку SdFat - есть пример с именем Timestamp.ino, подробно описывающий, как это сделать ...
// после того, как ваш rtc настроен и работает, ваш код просто необходим: void dateTime(uint16_t* date, uint16_t* time) { DateTime now = rtc.now(); // возвращает дату с помощью макроса FAT_DATE для форматирования полей *date = FAT_DATE(now.year(), now.month(), now.day()); // время возврата с помощью макроса FAT_TIME для форматирования полей *time = FAT_TIME(now.hour(), now.minute(), now.second()); } // поместите это вне каких-либо функций, перед вашей "настройкой" // Затем внутри вашего "цикла" или "настройки" void loop(void) { // Другой код, который делает вещи //поместите эту следующую строку * Прямо перед * любой открытой строкой файла: SdFile::dateTimeCallback(dateTime); dataFile = SD.open(datafilename, FILE_WRITE); // другой код, который делает вещи }
Есть еще один способ добиться этого в скетче без необходимости преобразования в SdFat:
@donald0000 хочет, чтобы в поле Дата изменения отображалась фактическая отметка времени когда вы просматриваете файлы, присутствующие на карте, с помощью проводника Windows. Как говорит Билли Хо, функция обратного вызова - это способ сделать это. Вы действительно можете использовать эту функцию с
SD.h
, если вы не хотите конвертировать в СДФат. Вот пример функции в скетче. Обратите внимание на время, когда записывается метка времени изменения даты, это когдаfile.close()
записывает фактические данные на карту памяти.#include <SPI.h> #include <SD.h> #include <Wire.h> #include <RTClib.h> File file; // тестовый файл const uint8_t SD_CS = 10; // Выбор микросхемы SD RTC_DS1307 RTC; // определяет объект часов реального времени char timestamp[30]; //------------------------------------------------------------------------------ // обратный вызов для временных меток файлов void dateTime(uint16_t* date, uint16_t* time) { DateTime now = RTC.now(); sprintf(timestamp, "%02d:%02d:%02d %2d/%2d/%2d \n", now.hour(),now.minute(),now.second(),now.month(),now.day(),now.year()-2000); Serial.println("yy"); Serial.println(timestamp); // возвращает дату с помощью макроса FAT_DATE для форматирования полей *date = FAT_DATE(now.year(), now.month(), now.day()); // время возврата с помощью макроса FAT_TIME для форматирования полей *time = FAT_TIME(now.hour(), now.minute(), now.second()); } //------------------------------------------------------------------------------ void setup() { Serial.begin(9600); Wire.begin(); if (!RTC.begin()) { Serial.println("RTC failed"); while(1); }; // установить дату и время функции обратного вызова SdFile::dateTimeCallback(dateTime); DateTime now = RTC.now(); sprintf(timestamp, "%02d:%02d:%02d %2d/%2d/%2d \n", now.hour(),now.minute(),now.second(),now.month(),now.day(),now.year()-2000); Serial.println("xx"); Serial.println(timestamp); if (!SD.begin(SD_CS)) { Serial.println("SD.begin failed"); while(1); } file = SD.open("TEST_SD.TXT", FILE_WRITE); file.println("Testing 1,2,3..."); delay(5000); file.close(); Serial.println("Done"); } //------------------------------------------------------------------------------ void loop() {}
Проще говоря, FAT16
поддерживает только 1 дату, обычно измененную дату. FAT32
имеет (ограниченную) поддержку для 3 дат (но AFAIK нет библиотеки Arduino, которая поддерживает FAT32
).
Даже тогда не все ОС даже поддерживают дату создания. Windows имеет 2 различные интерпретации в зависимости от приложения, Linux изначально поддерживает только дату изменения, хотя расширения обеспечивают поддержку большего количества дат.
- Режимы открытия файлов на SD-карте Arduino добавление/перезапись
- Правильная схема карты Micro SD
- Сохранение файла .txt на SD-карту и чтение данных каждого содержимого в файл txt, а затем сохранение его в переменной
- Использование SD-адаптера 5 В в системе 3,3 В
- Лучшая практика буферизации для непрерывной записи на SD-карту
- Проблема с открытием нескольких текстовых файлов одновременно/по порядку с использованием <SD.h>
- DFPlayer для записи на SD-карту
- Почему частота обновления постоянно уменьшается при входе на SD-карту?
последняя библиотека SDFAT поддерживает FAT32., @TDHofstetter