SD库存在的一些问题以及求创建文件名为变量时的方法
本帖最后由 xxfx1118 于 2014-5-5 14:48 编辑最近几天使用SD卡模块及Arduino自带的SD库,发现的问题
《Arduino程序设计基础》书中没有提到的部分,在此整理一下
1、SD库创建文件只能创建文件名长度为不超过8+3的文件。
可以小于这个数,但不能长过它。例如:
SD.open("test.txt", FILE_WRITE);
SD.open("test.a", FILE_WRITE);都可以,
但SD.open("123456789.txt", FILE_WRITE); 就创建失败。
读文件时同理。即便是卡上已经有了123456789.txt文件,用SD.open("123456789.txt")也打不开。
2、创建成的文件名只能是大写,无论你SD.open("test.txt", FILE_WRITE);时用的是小写还是大小写混合。
3、创建文件夹时,也是不超过8位,自动变大写。
检测文件夹存在用SD.exists("TEST001/"), 就是比检测文件多用个斜杠;
向文件夹里建文件就用SD.open("TEST001/DATA001.txt", FILE_WRITE)。
4、SD.exists,SD.open(写文件) 两个命令在中途拔掉SD卡之后,依然提示成功。
我没找到让这两个命令失败的方法,只要在SD.begin()之后拔掉SD卡,程序会一直进行,检测、写文件都会提示成功,即便SD卡已经拔掉。
不知道大家是不是也遇到这样的情况。
5、再就是有一点不懂:如果要创建的文件名在变量里,则应怎样创建文件的方法。请教各位一下
举个例子 假如我接了硬件时钟1307,然后我想用今天的日期作为文件名,但是日期存在 tm.Day, tm.Month 变量里面,怎么把变量作为文件名呢?
SD.open(tm.Day , FILE_WRITE); 编译不通过。
有什么办法可以实现呢? 请教各位,谢谢
自己顶一下 前面几个没看哈,以你的认真程度肯定能解决啦,最近比较忙,就晚上看下论坛。
第5个问题,提问的时候最好带上编译器提示的报错,看看报错应该就能解决了。
我估计是你变量类型的问题,所以看了看SD库,果然
File open(const char *filename, uint8_t mode = FILE_READ);
也就是说这里文件名必须是const char类型。
我不太清楚你的tm.DAY是什么类型,如果是string。
那么转换下就行了,例如:
String day = "20140506";
const char* c_day = day.c_str();
然后用这个c_day做filename就行了 2、3都遇到过。 本帖最后由 liudr 于 2014-5-10 21:30 编辑
char buffer;
sprint(buffer,"%4d%02d%02d.TXT",tm.Year, tm.Month, tm.Day); //Assume 20140511.TXT format
SD.open(buffer,FILE_WRITE);
liudr 发表于 2014-5-10 21:29
char buffer;
sprint(buffer,"%4d%02d%02d.TXT",tm.Year, tm.Month, tm.Day); //A ...
使用sprint函数直接用就行了是吧 还需要include什么头文件吗?谢谢 如果用arduino IDE,那就不用include。 liudr 发表于 2014-5-10 21:29
char buffer;
sprint(buffer,"%4d%02d%02d.TXT",tm.Year, tm.Month, tm.Day); //A ...
用arduino IDE编译没有通过也 2个办法都不行 奈何col 发表于 2014-5-6 23:58
前面几个没看哈,以你的认真程度肯定能解决啦,最近比较忙,就晚上看下论坛。
第5个问题,提问的时候最好 ...
不是很懂这2句代码的意思,编译没有通过