arduino学习笔记18SD卡读写实验教程文件.docx
《arduino学习笔记18SD卡读写实验教程文件.docx》由会员分享,可在线阅读,更多相关《arduino学习笔记18SD卡读写实验教程文件.docx(14页珍藏版)》请在冰豆网上搜索。
arduino学习笔记18SD卡读写实验教程文件
arduino学习笔记18---SD卡读写实验
本次实验使用arduino驱动SD卡,在SD卡中进行文件读写。
需要说明的是arduino的SD库文件,目前对2G以上的卡支持不是很好,所以推荐大家使用2G包含2G以下的,文件格式使用FAT格式。
这次我是用的是kingmax2G的MicroSD卡。
先看一下硬件连接图
把下面代码下载进arduino控制板
/*
此例子展示如果记录三个模拟引脚数值到SD卡,使用SD库。
电路部分
*模拟引脚使用模拟口0,1,2大家可以根据情况接入模拟传感器,
如果没有,也可以完成此实验,只不过数值是不停跳动的干扰源。
*SD卡与arduino控制板使用SPI总线连接
**MOSI-pin11
**MISO-pin12
**CLK-pin13
**CS-pin4
*/
#include
//CS引脚为pin4,这里也沿用官方默认设置
constintchipSelect=4; //设定CS接口
voidsetup()
{
Serial.begin(9600); //设置串口通信波特率为9600
Serial.print("InitializingSDcard..."); //串口输出数据InitializingSDcard...
pinMode(10,OUTPUT);
if(!
SD.begin(chipSelect)){ //如果从CS口与SD卡通信失败,串口输出信息Cardfailed,ornotpresent
Serial.println("Cardfailed,ornotpresent");
return;
}
Serial.println("cardinitialized."); //与SD卡通信成功,串口输出信息cardinitialized.
}
voidloop()
{
//定义数组
StringdataString="";
//读取三个传感器值,写入数组
for(intanalogPin=0;analogPin<3;analogPin++){
intsensor=analogRead(analogPin);
dataString+=String(sensor);
if(analogPin<2){
dataString+=",";
}
}
//打开文件,注意在同一时间只能有一个文件被打开
//如果你要打开另一个文件,就需要先关闭前一个
FiledataFile=SD.open("datalog.txt",FILE_WRITE);
//打开datalog.txt文件,读写状态,位置在文件末尾。
if(dataFile){
dataFile.println(dataString);
dataFile.close();
//数组dataString输出到串口
Serial.println(dataString);
}
//如果无法打开文件,串口输出错误信息erroropeningdatalog.txt
else{
Serial.println("erroropeningdatalog.txt");
}
}
复制代码
下载完成后,打开串口监视器。
控制板开始工作后会看到如下画面,图中每一行上就是每次记录的三个传感器数值,本次实验并没有接传感器,所以数值是周围干扰源的杂乱信号。
关闭arduino电源后把SD卡取出,接入电脑后,可以看到SD卡中有一个DATALOG.TXT文件,打开后有可以看到,此文件中的信息就是记录下的各个传感器的数值。
第一个代码实验完以后,SD卡中的DATALOG.TXT不要删除,把下面代码下载进arduino中,打开串口监视器,看看效果。
/*
这个例子展示如何通过SD库从SD卡中读取一个文件,并且把数据通过串口发送。
*SD卡与arduino控制板使用SPI总线连接
**MOSI-pin11
**MISO-pin12
**CLK-pin13
**CS-pin4
*/
#include
//CS引脚为pin4,这里也沿用官方默认设置
constintchipSelect=4; //设定CS接口
voidsetup()
{
Serial.begin(9600); //设置串口通信波特率为9600
Serial.print("InitializingSDcard..."); //串口输出数据InitializingSDcard...
pinMode(10,OUTPUT);
if(!
SD.begin(chipSelect)){ //如果从CS口与SD卡通信失败,串口输出信息Cardfailed,ornotpresent
Serial.println("Cardfailed,ornotpresent");
//don'tdoanythingmore:
return;
}
Serial.println("cardinitialized."); //与SD卡通信成功,串口输出信息cardinitialized.
FiledataFile=SD.open("datalog.txt"); //打开datalog.txt文件
if(dataFile){
while(dataFile.available()){ //检查是否dataFile是否有数据
Serial.write(dataFile.read()); //如果有数据则把数据发送到串口
}
dataFile.close(); //关闭dataFile
}
else{
Serial.println("erroropeningdatalog.txt"); //如果文件无法打开串口发送信息erroropeningdatalog.txt
}
}
voidloop()
{
}
复制代码
可以看到,DATALOG.TXT文件中的数据都通过串口发送回了电脑。
效果如下图:
再把下面的代码下载进arduino控制板中,打开串口监控器看看效果。
/*
此例子展示如何在SD卡中创建于删除文件
*SD卡与arduino控制板使用SPI总线连接
**MOSI-pin11
**MISO-pin12
**CLK-pin13
**CS-pin4
*/
#include
FilemyFile;
voidsetup()
{
Serial.begin(9600); //设置串口通信波特率为9600
Serial.print("InitializingSDcard..."); //串口输出数据InitializingSDcard...
pinMode(10,OUTPUT);
if(!
SD.begin(4)){ //如果从CS口与SD卡通信失败,串口输出信息initializationfailed!
Serial.println("initializationfailed!
");
return;
}
Serial.println("initializationdone."); //CS口与SD卡通信成功,串口输出信息initializationdone.
if(SD.exists("example.txt")){ //检查example.txt文件是否存在
Serial.println("example.txtexists."); //如果存在输出信息example.txtexists.至串口
}
else{
Serial.println("example.txtdoesn'texist."); //不存在输出信息example.txtdoesn'texist.至串口
}
Serial.println("Creatingexample.txt...");
myFile=SD.open("example.txt",FILE_WRITE); //打开example.txt,如果没有自动创建,写入状态
myFile.close(); //关闭文件
if(SD.exists("example.txt")){
Serial.println("example.txtexists.");
}
else{
Serial.println("example.txtdoesn'texist.");
}
Serial.println("Removingexample.txt...");
SD.remove("example.txt"); //删除文件example.txt
if(SD.exists("example.txt")){
Serial.println("example.txtexists.");
}
else{
Serial.println("example.txtdoesn'texist.");
}
}
voidloop()
{
}
复制代码
下面图就是串口监视器显示的结果,显示文件创建于删除的过程。
再把下面的代码传入arduino控制板,看看效果
#include
FilemyFile;
voidsetup()
{
Serial.begin(9600);
Serial.print("InitializingSDcard...");
pinMode(10,OUTPUT);
if(!
SD.begin(4)){
Serial.println("initializationfailed!
");
return;
}
Serial.println("initializationdone.");
myFile=SD.open("test.txt",FILE_WRITE);
if(myFile){
Serial.print("Writingtotest.txt...");
myFile.println("testing1,2,3.");
myFile.close();
Serial.println("done.");
}else{
Serial.println("erroropeningtest.txt");
}
myFile=SD.open("test.txt");
if(myFile){
Serial.println("test.txt:
");
while(myFile.available()){
Serial.write(myFile.read());
}
myFile.close();
}else{
Serial.println("erroropeningtest.txt");
}
}
voidloop()
{
}
复制代码
串口监视器中可以看到如下画面
把SD卡接入电脑,可以在里面找到TEST.TXT文件,里面的内容如下。