写在前面
几经波折,终于达到预期,在此做个记录。
测试代码
//加载库
#include "Arduino.h"
#include "FS.h"
#include "SD.h"
#include "SPI.h"
//定义SD针脚
#define TFT_SD D7
void setup()
{
//开启串口
Serial.begin(115200);
//挂载SD卡
MountSD();
//路径
String path1 = "/hello.txt";
//内容
String str1 = "hello world !";
//写入(覆盖)
writeTxt(SD,path1,str1);
//路径
String path2 = "/love.txt";
//内容
String str2 = "i love you !";
//写入(续写)
writeTxt_APPEND(SD,path2,str2);
//读取1
String txt1 = readTxt(SD,path1);
Serial.println( txt1 );
//读取2
String txt2 = readTxt(SD,path2);
Serial.println( txt2 );
}
void loop()
{
}
//挂载SD卡
void MountSD()
{
//开启SD卡
if(SD.begin())
{
//打印成功
Serial.println("Card Mount succeed");
}
else
{
//打印失败
Serial.println("Card Mount Failed");
//挂载失败,延时重启
delay(1000);
//重启
return;
}
//获取SD类型
uint8_t cardType = SD.cardType();
switch(cardType)
{
case 1:
Serial.println("CARD_MMC");
break;
case 2:
Serial.println("CARD_SD");
break;
case 3:
Serial.println("CARD_SDHC");
break;
case 4:
Serial.println("CARD_UNKNOWN");
break;
default:
Serial.println("CARD_NONE");
Serial.println("Please insert SD card");
delay(1000);
return;
}
}
//写入(FILE_WRITE)
void writeTxt(fs::FS &fs,String path,String str)
{
//打开文件
File myFile = fs.open(path, FILE_WRITE); //FILE_WRITE 覆写
//如果文件打开,则进行写入
if (myFile)
{
//打印开始
Serial.println("Start write:" + path);
//写入
myFile.println(str);
// 关闭文件
myFile.close();
//打印完成
Serial.println("Complete write:" + path);
}
//如果文件没有打开,则打印错误
else
{
Serial.println("error:Write failure");
}
}
//写入(FILE_APPEND)
void writeTxt_APPEND(fs::FS &fs,String path,String str)
{
//打开文件
File myFile = fs.open(path, FILE_APPEND); //FILE_APPEND 续写
//如果文件打开,则进行写入
if (myFile)
{
//打印开始
Serial.println("Start write_APPEND:" + path);
//写入
myFile.println(str);
// 关闭文件
myFile.close();
//打印完成
Serial.println("Complete write_APPEND:" + path);
}
//如果文件没有打开,则打印错误
else
{
Serial.println("error:Write failure");
}
}
//读取
String readTxt(fs::FS &fs,String path)
{
//创建返回值
String txt;
//打开文件
File myFile = fs.open(path,FILE_READ); //FILE_READ 只读
//如果文件打开,则进行读取
if (myFile)
{
//打印开始
Serial.println("Start Read:" + path);
//读取
if( myFile.available() )
{
txt = myFile.readString();
}
//关闭文件打开状态
myFile.close();
//打印完成
Serial.println("Complete read:" + path);
}
//如果文件没有打开,则打印错误
else
{
Serial.println("error:Read failure");
}
//返回
return txt;
}
测试结果
注意事项
1、确认SD卡针脚
2、fs.open(path,mode)函数,mode有多种方式
FILE_WRITE 以可写的方式打开,覆写内容
FILE_APPEND 以可写的方式打开,续写内容
FILE_READ 以只读的方式打开
3、fs.readString()函数,直接读取文本,并返回String
参考
Arduino UNO:在TF卡中创建并读写TXT文件_arduino uno sd卡 error opening test.txt-CSDN博客