SdFat Arduino SD卡写作

时间:2014-10-03 14:55:30

标签: arduino sd-card

我遇到了一个问题,我认为没有理由在那里。

基本思路是使用Arduino中的SdFat库写入SD卡来记录数据。

在记录之间,设备将进入休眠状态并使用MOSFET我将完全关闭SD卡以节省电量。

整个代码可以工作,但只有当我从我刚写入的文件中读取数据时才会这样。 当我从文件中取出代码时,它会创建文件,但根本不会写入文件。

现在我正在使用延迟而不是微睡,只是为了减少要关注的事情。

以下是与读取文件一起使用的代码,使用示例文件只是为了让这个东西现在正常工作。

const int chipSelect = 4;
/*
 The circuit:
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4   
 */
#include <SdFat.h>
SdFat sd;
SdFile myFile;

char fileName[] = "2468.txt";
int sdPower = 3;
void setup() 
{  
  pinMode(sdPower,OUTPUT);
}

void loop() 
{  
  digitalWrite(sdPower,HIGH);
  sd.begin(chipSelect, SPI_HALF_SPEED);
  myFile.open(fileName, O_RDWR | O_CREAT | O_AT_END);

  myFile.println("Hello World");


  myFile.close();  

  // re-open the file for reading:
  if (!myFile.open(fileName, O_READ)) {
    sd.errorHalt("opening test.txt for read failed");
  }

  // read from the file until there's nothing else in it:
  int data;
  while ((data = myFile.read()) >= 0) Serial.write(data);
  // close the file:
  myFile.close();

  digitalWrite(sdPower,LOW);
 delay(1000);  
}

以上是有效的,但是当我拿出最后几行时,读取它不会写入文件,就像这样。

const int chipSelect = 4;
/*
 The circuit:
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4   
 */
#include <SdFat.h>
SdFat sd;
SdFile myFile;

char fileName[] = "2468.txt";
int sdPower = 3;
void setup() 
{  
  pinMode(sdPower,OUTPUT);
}

void loop() 
{  
  digitalWrite(3,HIGH);
  sd.begin(chipSelect, SPI_HALF_SPEED);
  myFile.open(fileName, O_RDWR | O_CREAT | O_AT_END);

  myFile.println("Hello World");


  myFile.close();  

  digitalWrite(3,LOW);
 delay(1000);  
}

然而它仍然会创建文件。 这真让我感到困惑。

为什么程序在删除读取部分时不写?因为我在两个实例中关闭文件都没关系吗?

2 个答案:

答案 0 :(得分:0)

可能正在移除卡的电源

 {
 digitalWrite(3,LOW);
 }
在写入目录和FAT数据之前

通过close()命令执行卡。在关闭卡之前尝试延迟1秒钟。工作示例中的读取数据循环确保文件已正确关闭;-)

答案 1 :(得分:0)

我知道这已经很老了,但是我处在相同的情况下,所以我将写出答案来帮助寻求此目的的任何人。

解决方案很简单,您必须先--extra-include-dirs="..."内容,然后再关闭文件:

Missing (or bad) header file: jack/jack.h

这将确保将内容写入SD卡。