Arduino 串口读写 SD 卡模块


/*
   Arduino 的 Nano 的引脚
   MOSI----------11
   MISO----------12
   CLK-----------13
   CS------------10
*/

#include <SD.h>

File myFile; // 文件的句柄
String filename = "mogu.txt"; // 文件名
const int chipSelect = 10;  // SD 卡使能引脚

#define BUFF_SIZE 128  // 缓冲区大小
char buff[BUFF_SIZE];  // 缓冲区数组
int readsize = 0;   // 实际读取的长度


// 单片机初始化函数
void setup() {
  // 设置串口
  // 波特率为 38400, 8位数据位, 2位停止位, 偶校验
  Serial.begin(38400, SERIAL_8E2);

  // 判断串口是否可用
  // 如果不可用等在这里
  while (!Serial) {
    delay(1000);
  }

  Serial.println("Initializing SD card...");
  // 初始化化 sd 卡
  // 如果初始化失败, 打印log, 程序返回
  if (!SD.begin(chipSelect)) {
    Serial.println("initialization failed!");
    return;
  }

  // 程序执行到这里,说明 sd 卡初始化完成
  Serial.println("initialization done.");

  // 判断文件是否存在
  if (SD.exists(filename)) {
    Serial.println("file exists, delete file");
    // 如果文件存在, 删除文件
    SD.remove(filename);
  }

  Serial.println("creat file");
  // 旧文件删除, 新建文件
  myFile = SD.open(filename, FILE_WRITE);
  // 判断文建是否创建成功
  // 如果文件创建失败, 打印log, 程序返回
  if (!myFile) {
    Serial.println("error opening file");
    return;
  }

  //  myFile = SD.open(filename);
  //  if (myFile) {
  //    Serial.println("test.txt:");
  //
  //    // read from the file until there's nothing else in it:
  //    while (myFile.available()) {
  //      Serial.write(myFile.read());
  //    }
  //    // close the file:
  //    myFile.close();
  //  } else {
  //    // if the file didn't open, print an error:
  //    Serial.println("error opening test.txt");
  //  }
}

void loop() {

}

// 串口中断入口函数
// 单片机接收到数据后自动调用此函数
void serialEvent() {
  // 读取接收到的数据长度
  while ((readsize = Serial.available()) > 0 ) {
    // 判断文件操作是否可用
    // 可用才能往文件里写数据
    if (myFile) {
      // 清空旧的缓存
      memset(buff, 0, sizeof(buff));
      // 将数据保存到缓冲区中
      Serial.readBytes(buff, readsize);
      // 再将缓冲区中的数据写入sd卡中
      myFile.write(buff);
      // 刷新 sd 卡
      myFile.flush();
      Serial.print(buff);
    }
  }
}
  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本教程提供了使用基于WIZ5500的以太网屏蔽与Arduino兼容的基础知识。 Wiznet WIZ5500是一款现代以太网接口芯片,用于Adafruit的Ethernet Shield W5500和Feather Ethernet Wing。 屏蔽外形适用于基于ATmega328的Arduino兼容产品,如Arduino Uno R3和Adafruit Metro 328(Classic)。屏蔽包含用于网络的以太网连接和用于存储数据的SD插槽。 羽翼可与带有SD插槽的羽毛配合使用。 Feather 32u4 Adalogger拥有Arduino Leonardo兼容32u4处理器和micro-SD插槽。通过以太网羽翼,它在更小的封装中提供与Ethernet Shield + Metro / Uno相同的功能。 SD和micro-SD对于所有目的都是相同的,但后者更小。在本教程中,当它表示对SD执行某些操作并且您正在使用Feathers时,请考虑使用micro-SD。 本教程假设您已经了解Arduino IDE的基础知识,代码生成和Arduino接口。如果您对Arduino IDE不太熟悉,可以查看Adafruit Learn Arduino系列中的教程。 截至本修订教程的日期,Arduino指出他们的以太网盾已经退役。如果使用退役或第三方以太网屏蔽,则可能必须使用支持电路板使用的芯片组的不同Arduino库。请注意,Ethernet Shield和Feather Wing Adafruit使用的是基于WIZ5500芯片,而不是旧的WIZ5100芯片组或其他。 WIZ5500需要Ethernet2库,而不是Arduino上的旧以太网库。如果您使用较旧的硬件,请确保将库从Ethernet2更改为以太网并仔细检查。 本教程将通过准备然后使用SD,一般情况下上的文件。最后一个示例将说明如何通过以太网远程访问SD。此功能可能是远程文件存储或访问远程Arduino兼容的其他程序的基础。 SD准备 确保使用计算机将SD预格式化为FAT16。 FAT16很久以前就由微软推出,但它很简单,微控制器也很简单。 许多格式化程序支持FAT16。 Windows使用format命令支持FAT16本机。 建议您使用sdcard.org SD记忆格式化程序。 它适用于PC和Mac。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值