我遇到了一个问题,我认为没有理由在那里。
基本思路是使用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);
}
然而它仍然会创建文件。 这真让我感到困惑。
为什么程序在删除读取部分时不写?因为我在两个实例中关闭文件都没关系吗?
答案 0 :(得分:0)
可能正在移除卡的电源
{
digitalWrite(3,LOW);
}
在写入目录和FAT数据之前通过close()
命令执行卡。在关闭卡之前尝试延迟1秒钟。工作示例中的读取数据循环确保文件已正确关闭;-)
答案 1 :(得分:0)
我知道这已经很老了,但是我处在相同的情况下,所以我将写出答案来帮助寻求此目的的任何人。
解决方案很简单,您必须先--extra-include-dirs="..."
内容,然后再关闭文件:
Missing (or bad) header file: jack/jack.h
这将确保将内容写入SD卡。