не может показать свободное место на SD-карте с arduino nano

Я использую nano v3, модуль SD и карту microSD на 64 ГБ. Запись на карту работает нормально. Но я не могу распечатать оставшееся свободное место на карте.

Я использую этот код:

/*
SD-карта чтение/запись

В этом примере показано, как читать и записывать данные в файл SD-карты и из него.
Схема:
* SD-карта подключена к шине SPI следующим образом:
** MOSI - контакт 11
** МИСО - контакт 12
** CLK — контакт 13

создано в ноябре 2010 г.
Дэвид А. Меллис
изменено 9 апреля 2012 г.
Том Айгоу

Этот пример кода находится в общественном достоянии.

*/

#include <SPI.h>
//#включить <SD.h>
#include "SdFat.h"
SdFat SD;

#define csPin 4
File myFile;
SdFat sd;

int startMillis;
int duration;

uint32_t freeKB;


void setup() {
  // Открытие последовательной связи и ожидание открытия порта:
  Serial.begin(9600);
  while (!Serial) {
    ; // ждем подключения последовательного порта. Требуется только для родного порта USB
  }


  Serial.print("Initializing SD card...");

  if (!SD.begin(csPin)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  // открываем файл. обратите внимание, что одновременно может быть открыт только один файл,
  // так что вы должны закрыть это, прежде чем открывать другое.
  myFile = SD.open("test.txt", FILE_WRITE);
  if (myFile) {
    myFile.close();
    Serial.println("done.");
  } else {
    // если файл не открылся, вывести ошибку:
    Serial.println("error opening test.txt");
  }
}

void loop() {
  myFile = SD.open("test.txt", FILE_WRITE);

  for (int j = 0; j < 1000; j++) {
    myFile.println(j);
  }
  myFile.close();
  startMillis = millis();
  ShowFreeSpace();
  duration = millis() - startMillis;
  Serial.print("Took ");
  Serial.print(duration);
  Serial.println("ms to calculate");
  delay(1000);
}

void ShowFreeSpace() {
  // Подсчет свободного места (объем свободных кластеров * блоков на кластер / 2)
  long lFreeKB = sd.vol()->freeClusterCount();
  lFreeKB *= sd.vol()->blocksPerCluster()/2;

  // Показать свободное место
  Serial.print("Free space: ");
  Serial.print(lFreeKB);
  Serial.println(" KB");
}

Что я делаю не так?

, 👍0

Обсуждение

это очень плохое описание того, что на самом деле происходит не могу распечатать свободное место ..... оно не дает информации, которую можно было бы использовать для ответа на вопрос, @jsotola

aJazz, ты видел мой ответ?, @Juraj


1 ответ


1

У вас есть два экземпляра класса SdFat. В setup() вы начинаете SD и для свободного места пытаетесь использовать sd. Удалите строку SdFat sd; и в ShowFreeSpace используйте SD.vol().

,