SD.open() 返回 true 但不创建文件

Dre*_*ejc 1 arduino

我遇到了 SD 卡和 Arduino 的特定问题。我想创建一个函数,在 SD 卡上创建不同日期的新文件。现在,我正在用整数模拟日历。我知道这个问题已经被讨论过,但我似乎找不到类似讨论的问题。

代码:

#include <stdlib.h> // included for floatToString 
#include <math.h> 
#include <SPI.h>
#include <SD.h>

int year = 2014;
int month = 11;
int day = 4;

char dateTitle[20]; //= "0000000000.txt";

void printDateTitle(char* dateTitle, int Y, int M, int D){
  //char dateTitle[20];
  sprintf(dateTitle, "%4d-%02d-%02d.txt", Y, M, D);
  return;
}

const int chipSelect = 4;

void setup() {
  //printDateTitle(dateTitle, year, month, day);
  Serial.begin(9600);
  while (!Serial) {
    ;
  }
  Serial.print("Initializing SD card...");
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    while (1);
  }
  Serial.println("card initialized.");
}

void loop() {
  Serial.print(dateTitle);
  delay(1000);
  File dataFile = SD.open(dateTitle, FILE_WRITE);
  if (dataFile){
    dataFile.println("something");
    dataFile.close();
    Serial.print(day);
    Serial.println("something");
    delay(1000);
  } else 
    Serial.println("Error");
}
Run Code Online (Sandbox Code Playgroud)

在代码中,我有一个函数void printDateTitle将日历中的输入格式化为我想用作文件标题的字符串。

而且,当我在void loop()with中定义一个函数时printDateTitle(dateTitle, year, month, day);中定义函数时,输出中出现“错误”,意思是 SD.open = false。

问题是,即使 SD.open 返回 true,它也不会在 SD 卡上创建文件。.txt 包含在 char 数组中。我也使用过大写.TXT。

对于有关该问题的所有建议,我将不胜感激。

作为参考,我使用 Arduino Uno 和Micro SD 卡适配器以及 Arduino IDE。

小智 6

Arduino SD 库文档指出它使用“文件的短 8.3 名称”。因此,只有名称为 8 个字符、文件扩展名为 3 个字符的文件才有效。例如:12345678.txt 有效,123456789.txt 无效。

您的日期字符串 (2014-11-04.txt) 太长,因为它有 10 个字符,而不是只有 8 个字符。

另请确保您已将 SD 卡格式化为 FAT16 或 FAT32 文件系统。