Arduino записывает только один раз на SD-карту - журнал данных

Я подключил SD-карту к Arduino, как описано здесь. Проблема в том, что Arduino записывает только один раз на SD-карту, и я не понимаю причины.

#include <SD.h>
#include <SPI.h>

int CS_PIN = 4;

File file;

void setup() {
  Serial.begin(9600);
  pinMode(10, OUTPUT); 
  digitalWrite(10, HIGH);
  Serial.print("Initializing SD card...");
  if (!SD.begin(CS_PIN)) {
    Serial.println("Card failed, or not present");
    return;
  }
  Serial.println("card initialized.");
}

void loop() {
  String dataString = "TEST";
  File dataFile = SD.open("datalog.txt");
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();
    Serial.println(dataString);
  } else {
    Serial.println("error opening datalog.txt");
  }
  delay(1000);
}

Вывод на последовательный монитор:

Arduino записывает только один раз на SD-карту открытие ошибки datalog.txt ошибка открытия datalog.txt ошибка открытия datalog.txt ошибка открытия datalog.txt ошибка открытия datalog.txt ошибка открытия datalog.txt ошибка открытия datalog.txt ошибка открытия datalog.txt ошибка открытия datalog.txt ошибка открытия datalog.txt ошибка открытия datalog.txt ошибка открытия datalog.txt ошибка открытия datalog.txt

Я также попытался использовать:

SD.open("file.txt", O_RDWR | O_APPEND);
SD.open("file.txt", O_RDWR | O_CREAT);

Как я видел, добавление данных в файл SD-карты, но это не работает.

, 👍1

Обсуждение

разве вам не нужен режим при открытии?, @dandavis

откройте файл в разделе настройка. затем запишите данные в цикл. после того как все данные будут записаны, закройте файл, @jsotola


3 ответа


2

Вы открываете файл в режиме чтения, но должны открывать его в режиме записи. Изменить файл dataFile = SD.open("datalog.txt "); в файл dataFile = SD.open("datalog.txt ", FILE_WRITE);.

Вы можете удалить эту строку кода: digitalWrite(10, HIGH);.

В arduino.cc веб-сайт также является отличным источником информации о библиотеке SD.

,

1

Файл dataFile = SD.открыть("datalog.txt ");

Многократное открытие одного и того же файла, вероятно, не является хорошей практикой, если вы хотите сохранить ранее записанное содержимое.

,

-1

Для людей, сталкивающихся с той же проблемой. У меня была такая же проблема, когда SD-карта запускала инструкцию if только один раз, а затем больше не читала ее. По какой-то причине, после того, как я запустил примеры сценариев CardInfo, DumpFile и ReadWrite в библиотеке SD (изменив название команды SD.open() на то, которое я использовал), мой код начал работать, и он начал выполнять оператор if каждый раз. Я бы рекомендовал попробовать это, если вы столкнулись с той же проблемой.

,

Интересно, что у меня возникла проблема с открытием файла на моей SD-карте с помощью датчика считывателя SD-карт и моего Elegoo Mega2560, и запуск примера CardInfo (в библиотеке SD) решил ее для меня. В первый раз пример CardInfo выдал ошибку, а затем (просто сказав, что я сделал) Я вытащил свою SD-карту и вставил ее обратно, а затем снова запустил пример CardInfo, и тогда это сработало. Итак... Если у вас, ребята, возникнут какие-нибудь проблемы. Попробуйте использовать пример CardInfo из библиотеки SD и снова вставьте свою SD-карту., @David

это указывает на проблемы с выводом CS, @Juraj