SdFat Arduino SD卡写作

问题描述 投票:1回答:2

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

基本思想是使用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);  
}

然而它仍然创建了文件。这真让我困惑。

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

arduino sd-card
2个回答
0
投票

也许卡的电源正在被删除

 {
 digitalWrite(3,LOW);
 }

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


0
投票

我知道这已经过时了,但我处于相同的情况,所以我会写下我的答案来帮助其他寻求此事的人。

解决方案很简单,您必须在关闭文件之前flush()内容:

myFile.println("Hello World");
myFile.flush();
myFile.close(); 

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

© www.soinside.com 2019 - 2024. All rights reserved.