当前位置:文档之家› arduino学习笔记18 - SD卡读写实验

arduino学习笔记18 - SD卡读写实验

本次实验使用arduino驱动SD卡,在SD卡中进行文件读写。

需要说明的是arduino的SD库文件,目前对2G以上的卡支持不是很好,所以推荐大家使用2G包含2G以下的,文件格式使用FAT格式。

这次我是用的是kingmax2G的MicroSD卡。

先看一下硬件连接图把下面代码下载进arduino 控制板 /*此例子展示如果记录三个模拟引脚数值到SD 卡,使用SD 库。

电路部分* 模拟引脚使用模拟口0,1,2大家可以根据情况接入模拟传感器,如果没有,也可以完成此实验,只不过数值是不停跳动的干扰源。

* SD卡与arduino控制板使用SPI总线连接** MOSI - pin 11** MISO - pin 12** CLK - pin 13** CS - pin 4*/#include <SD.h>// CS引脚为pin4,这里也沿用官方默认设置const int chipSelect = 4; //设定CS接口void setup(){Serial.begin(9600); //设置串口通信波特率为9600Serial.print("Initializing SD card..."); //串口输出数据Initializing SD card...pinMode(10, OUTPUT);if (!SD.begin(chipSelect)) { //如果从CS口与SD卡通信失败,串口输出信息Card failed, or not presentSerial.println("Card failed, or not present");return;}Serial.println("card initialized."); //与SD卡通信成功,串口输出信息card initialized.}void loop(){// 定义数组String dataString = "";// 读取三个传感器值,写入数组for (int analogPin = 0; analogPin < 3; analogPin++) {int sensor = analogRead(analogPin);dataString += String(sensor);if (analogPin < 2) {dataString += ",";}}// 打开文件,注意在同一时间只能有一个文件被打开// 如果你要打开另一个文件,就需要先关闭前一个File dataFile = SD.open("datalog.txt", FILE_WRITE);// 打开datalog.txt文件,读写状态,位置在文件末尾。

if (dataFile) {dataFile.println(dataString);dataFile.close();// 数组dataString输出到串口Serial.println(dataString);}// 如果无法打开文件,串口输出错误信息error opening datalog.txtelse {Serial.println("error opening datalog.txt");}}复制代码下载完成后,打开串口监视器。

控制板开始工作后会看到如下画面,图中每一行上就是每次记录的三个传感器数值,本次实验并没有接传感器,所以数值是周围干扰源的杂乱信号。

关闭arduino电源后把SD卡取出,接入电脑后,可以看到SD卡中有一个DATALOG.TXT文件,打开后有可以看到,此文件中的信息就是记录下的各个传感器的数值。

第一个代码实验完以后,SD卡中的DATALOG.TXT不要删除,把下面代码下载进arduino中,打开串口监视器,看看效果。

/*这个例子展示如何通过SD库从SD卡中读取一个文件,并且把数据通过串口发送。

* SD卡与arduino控制板使用SPI总线连接** MOSI - pin 11** MISO - pin 12** CLK - pin 13** CS - pin 4*/#include <SD.h>// CS引脚为pin4,这里也沿用官方默认设置const int chipSelect = 4; //设定CS接口void setup(){Serial.begin(9600); //设置串口通信波特率为9600Serial.print("Initializing SD card..."); //串口输出数据Initializing SD card...pinMode(10, OUTPUT);if (!SD.begin(chipSelect)) { //如果从CS口与SD卡通信失败,串口输出信息Card failed, or not presentSerial.println("Card failed, or not present");// don't do anything more:return;}Serial.println("card initialized."); //与SD卡通信成功,串口输出信息card initialized.File dataFile = SD.open("datalog.txt"); //打开datalog.txt文件if (dataFile) {while (dataFile.available()) { //检查是否dataFile是否有数据Serial.write(dataFile.read()); //如果有数据则把数据发送到串口}dataFile.close(); //关闭dataFile}else {Serial.println("error opening datalog.txt"); //如果文件无法打开串口发送信息error opening datalog.txt}}void loop(){}复制代码可以看到,DATALOG.TXT文件中的数据都通过串口发送回了电脑。

效果如下图:再把下面的代码下载进arduino控制板中,打开串口监控器看看效果。

/*此例子展示如何在SD卡中创建于删除文件* SD卡与arduino控制板使用SPI总线连接** MOSI - pin 11** MISO - pin 12** CLK - pin 13** CS - pin 4*/#include <SD.h>File myFile;void setup(){Serial.begin(9600); //设置串口通信波特率为9600Serial.print("Initializing SD card..."); //串口输出数据Initializing SD card...pinMode(10, OUTPUT);if (!SD.begin(4)) { //如果从CS口与SD卡通信失败,串口输出信息initialization failed!Serial.println("initialization failed!");return;}Serial.println("initialization done."); //CS口与SD卡通信成功,串口输出信息initialization done.if (SD.exists("example.txt")) { //检查example.txt文件是否存在Serial.println("example.txt exists."); //如果存在输出信息example.txt exists.至串口}else {Serial.println("example.txt doesn't exist."); //不存在输出信息example.txt doesn't exist.至串口}Serial.println("Creating example.txt...");myFile = SD.open("example.txt", FILE_WRITE); //打开example.txt,如果没有自动创建,写入状态myFile.close(); //关闭文件if (SD.exists("example.txt")) {Serial.println("example.txt exists.");}else {Serial.println("example.txt doesn't exist.");}Serial.println("Removing example.txt...");SD.remove("example.txt"); //删除文件example.txtif (SD.exists("example.txt")){Serial.println("example.txt exists.");}else {Serial.println("example.txt doesn't exist.");}}void loop(){}复制代码下面图就是串口监视器显示的结果,显示文件创建于删除的过程。

再把下面的代码传入arduino控制板,看看效果#include <SD.h>File myFile;void setup(){Serial.begin(9600);Serial.print("Initializing SD card...");pinMode(10, OUTPUT);if (!SD.begin(4)) {Serial.println("initialization failed!");}Serial.println("initialization done.");myFile = SD.open("test.txt", FILE_WRITE);if (myFile) {Serial.print("Writing to test.txt..."); myFile.println("testing 1, 2, 3.");myFile.close();Serial.println("done.");} else {Serial.println("error opening test.txt"); }myFile = SD.open("test.txt");if (myFile) {Serial.println("test.txt:");while (myFile.available()) {Serial.write(myFile.read());}myFile.close();} else {Serial.println("error opening test.txt"); }}{}复制代码串口监视器中可以看到如下画面把SD卡接入电脑,可以在里面找到TEST.TXT文件,里面的内容如下。

相关主题