Проблеммы с sd картой
- Войдите на сайт для отправки комментариев
Ср, 24/05/2017 - 11:53
Ребята такая штука. вот скетч записи данных с датчика температуры на сд карту., как бы все работает, но есть проблемам большая, если отключить/ включить питание данные уже перестают писаться на эту карту, и пишутся дальше только если я создам новый файл, как решить вопрос что бы продолжало запись после ребута?
#include "DHT.h" //библиотека датчика темп. #include <SPI.h> //spi библиотека #include <SD.h> //cд библиотека #define DHTPIN 2 // пин датчика темп. #define DHTTYPE DHT22 // тип датчика DHT dht(DHTPIN, DHTTYPE); File myFile; void setup() { Serial.begin(9600); dht.begin(); while (!Serial) { ; } Serial.print("Initializing SD card..."); if (!SD.begin(4)) { Serial.println("initialization failed!"); return; } Serial.println("initialization done."); } void loop() { float t = dht.readTemperature(); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C"); myFile = SD.open("text.txt", FILE_WRITE); myFile.println(String(t)); myFile.close(); delay (1000);
Не знаю, что за версия библиотеки SD у Вас. В некоторых для записи в конец существующего файла обязательно указывать O_APPEND при отрытии, (у Вас это 28 строка) в некоторых - не обязательно. Поройте в этом направлении.
Реализуете электронное включение-отключение питания, а не просто тумблером рвёте цепь.
Под "электронным" я имею ввиду то, что при сигнале отключения у Вас с МК не сразу снимается питание, а после выполнения нужных действий. В данном случае - закрываете файл, пишете в ЕЕПРОМ флаг, что нужно продолжать запись после ребута. При загрузке проверяете флаг и открываете файл, если это требуется.
Пример схемки. Я её уже делал - нормально работает.
Реализуете электронное включение-отключение питания, а не просто тумблером рвёте цепь.
Под "электронным" я имею ввиду то, что при сигнале отключения у Вас с МК не сразу снимается питание, а после выполнения нужных действий. В данном случае - закрываете файл, пишете в ЕЕПРОМ флаг, что нужно продолжать запись после ребута. При загрузке проверяете флаг и открываете файл, если это требуется. Пример схемки. Я её уже делал - нормально работает.
Из ненадежной пушки по воробьям. ЕвгенийП описал простой способ - открывать и писать в конец файла. Или при новом старте проверять существование файла , создавать новый с другим именени и писать в него.
Пытался создавать новые файлы используя датчик времени, что бы имя нового файла создавалось такое же какое сейчас время вот так
вместо
но так ничего не создается
Скобки не допустимы в имени файла - подумайте над вашей командой myFile = SD.open("(rtc.getTimeStr()).txt", FILE_WRITE); еще.
[quote=partisanos]
Пытался создавать новые файлы используя датчик времени, что бы имя нового файла создавалось такое же какое сейчас время вот так
Заключив функцию в кавычки, то есть неявно инициализируя строку const char , вы пытаетесь создать файл с постоянным именем (rtc.getTimeStr()).txt
Преобразуйте время в строку при помощи ltoa(), добавьте в конце ".txt" и распечатайте для проверки через Serial.print(). Затем создавайте файл с оглядкой на длину имени и запреты некоторых символов типа наклонной черты и др. в имени файла
myFile = SD.open("(rtc.getTimeStr()).txt", FILE_WRITE);
Кавычки-то уберите.
Если он просто уберет кавычки, расширение ".txt" станет синтаксически неуместным для выражения. Можно убрать необязательное расширение имени файла или объединять эти две строки.
Я то подумал, что getTimeStr возвращет объект, у которого есть свойство txt :)
А так, да, конечно, объединять строки.