You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino Nano使用SD.h向CSV文件追加数据时fseek失效问题求助

问题排查与解决方法

核心逻辑错误

你当前代码的写入逻辑仅在文件不存在时才会执行,若文件已经创建过,整个if (!SD.exists("filename.csv"))代码块会直接跳过,自然不会写入任何新内容,这是最主要的问题。

其他常见问题点

  • 文件名不匹配:注释里标注要写ensayo.csv,但实际代码操作的是filename.csv,容易出现找错文件误以为写入失败的问题。
  • fseek用法错误:Arduino官方SD库的文件定位推荐使用seek()方法,而非底层的fseek,定位到文件末尾的正确写法如下,不需要提前执行读操作,写入模式下直接调用seek即可生效:
    myFile.seek(myFile.size());
    
  • SD卡兼容性问题:SD.h仅支持FAT16/FAT32格式的SD卡,容量超过32G的SDXC卡默认是exFAT格式,无法被识别,同时需要确认SPI接线、片选引脚配置正确,SD卡供电稳定。

修正后的代码示例

void init_SD(void) {
  Serial.print("Iniciando SD ...");
  if (!SD.begin(chip_select)) {
    Serial.println("No se pudo inicializar");
    return;
  }
  Serial.println("Inicializacion exitosa");
  
  bool fileIsNew = !SD.exists("ensayo.csv");
  // 统一打开文件,O_APPEND标志可直接让所有写入操作追加到末尾,无需手动seek
  myFile = SD.open("ensayo.csv", FILE_WRITE | O_APPEND);
  if (myFile) {
    // 仅新文件需要写入表头
    if (fileIsNew) {
      myFile.println("Titulo Archivo");
      myFile.println("Hora de Medicion,Tiempo [s],Corriente [A]");
    }
    // 这里写你需要追加的日常测量数据
    // myFile.println(数据内容);
    
    myFile.close();
  } else {
    Serial.println("Error abriendo el archivo");
  }
}

调试技巧

写入操作后可以打印返回值确认是否写入成功:

int writeLen = myFile.println("测试内容");
Serial.print("写入字节数:");
Serial.println(writeLen); // 返回0说明写入失败,大于0为成功

内容的提问来源于stack exchange,提问作者Juan Fixed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:24:00