使用Arduino中的SD.Remove()和SD库
Using SD.remove() and SD library in Arduino
我正在构建一个程序,该程序在pin0
上进行了10个模拟电压的测量,并将其打印到日志文件中。当我尝试确保文件空白时,我遇到的问题就来了。我正在使用SD.remove()
来删除以前的日志文件。当我这样做时,新的日志文件永远不会真正写入。当我删除对SD.remove()
的呼叫时,程序可以正常工作。这是SD库中的一些已知错误,还是在此方面有一些偷偷摸摸的方法?
代码在下面。
#include <SD.h>
#define OUTPUT_PIN 9 //Using SparkFun MP3 shield
#define DEFAULT_OUTPUT 10
#define VOLTAGE_REF (5)
//Reads a voltage on pin0. by default, the reference voltage is set to 5 V, but
//it can be changed by changing VOLTAGE_REF.
void setup() {
Serial.begin(9600);
Serial.println("Program Initialized");
pinMode(DEFAULT_OUTPUT ,OUTPUT); //Needs to be on to use the library
pinMode(0, INPUT);
if (!SD.begin(OUTPUT_PIN)) {
//init error
Serial.println("Error initializing SD card. Reset the Arduino and try again");
return;
}
Serial.println("Card sucessfully initialized");
if (SD.exists("LOGFILE.LOG") {
SD.remove("LOGFILE.LOG"); //We don't want to use the same file <<THIS IS THE BUG?
}
delay(10); //Make sure changes are applied
File logFile = SD.open("ANALOG.LOG", FILE_WRITE); //Create a new one every time
if (!SD.exists("LOGFILE.LOG")) {
Serial.println("There was some error making a new instance of the logfile?");
delay(1000);
SD.open("ANALOG.LOG", FILE_WRITE);
}
int i;
if (logFile) {
for(i=0;i<10;i++) {
int j = 0;
char str[64];
Serial.print("Reading analog sensor value");
for(j=0;j<=i;j++) {
Serial.print(".");
}
Serial.println();
logFile.print("Read #");
logFile.print(i+1);
logFile.print(" : ");
logFile.print(doVoltageRead(0));
unsigned char l = logFile.println(" V");
if (!l)
Serial.println("No data written");
delay(500);
}
Serial.println("Done.");
logFile.close(); //Close the logfile
Serial.println("Data sucessfully written");
}
else {
//Couldn't create file
Serial.println("There was an error creating the logfile");
}
}
void loop() {
//We don't really need to do anything here
}
float doVoltageRead(int pin) {
int voltageRead = analogRead(pin);
double divisor = (voltageRead * 0.00097752);
float finalVoltage =(VOLTAGE_REF * divisor);
Serial.println(finalVoltage);
return finalVoltage;
}
so ..首先,您查看logfile.log是否存在,如果它执行删除Analog.log。然后,您创建Analog.log。之后,您检查logfile.log是否存在。如果没有,则打印错误并打开Analog.log。
logfile.log的目的到底是什么?您不应该只是将logfile更改为模拟吗?
我找到了错误的来源。当我打开新的日志文件后打电话给if(SD.exists())
时,库不喜欢。我假设SD.exists()
仅检查打开返回的地址或对象是否为null。但是,当文件已经打开时调用它会导致一些奇怪的行为。删除该电话打开内部后,一切都很好。感谢所有的建议!
相关文章:
- 使用函数"remove"删除重复元素
- 链表的泛型函数remove()与成员函数remove)
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- Qt:remove() 和 rmdir() 有什么区别
- 在不使用系统的情况下从C++应用程序格式化 Linux 中的 SD 卡
- remove(str.begin(), str.end(), );无法正常工作(我正在使用视觉工作室 2012)
- 从Arduino SD卡模块到Array的文件名
- 如何使用 sd-bus 获取服务的状态?
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- 从 MATLAB 到 C++:相当于带有选项 'remove' 的 bwmorph
- 在Windows上读取/写入未格式化的SD卡
- 为二进制树编码remove()函数
- 我应该如何在 Mbed 中有效地写入 SD 卡?
- 如何理解"most modern linkers will remove redundant code like template instantiations."
- 使用容器中元素的别名删除带有 std::list::remove 的元素是否正确?
- C++ SD 总线源文件编译问题
- C++代码"x.erase(std::remove(x.begin(), x.end(), ), x.end())"是如何工作的?
- std::remove, std::move(range) and moved-from elements
- SD.remove() 不会删除 Arduino C++ 上的文件
- 使用Arduino中的SD.Remove()和SD库