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

Arduino中如何从SD卡文本文件拆分字符串与整数

Arduino读取SD卡键值对文件并拆分存储的简便方法

你的问题在于仅用readStringUntil(':')只能读取冒号前的键名,剩余的数值和换行符会留在缓冲区,导致无法正确拆分键值。下面是更可靠的实现方式,通过逐行读取、拆分键值对来完成变量赋值:

完整代码

#include <SD.h>

bool SDfound = false;
File printFile;
String buffer;
// 定义存储参数的变量
int sampleTime = 0;
int sampleInterval = 0;
String phone = "";

void setup() {
  Serial.begin(9600);

  // 初始化SD卡
  if (!SDfound) {
    if (!SD.begin(4)) {
      Serial.println("SD卡未找到");
      while(1); // 卡初始化失败则死循环
    }
    SDfound = true;
  }
  
  // 打开文件
  printFile = SD.open("consta.txt");
  if (!printFile) {
    Serial.println("无法打开consta.txt文件");
    while(1);
  }

  // 逐行读取并处理键值对
  while (printFile.available()) {
    buffer = printFile.readStringUntil('\n'); // 读取整行内容
    buffer.trim(); // 移除首尾的换行、空格等空白字符
    if (buffer.isEmpty()) continue; // 跳过空行

    // 定位冒号位置,拆分键和值
    int colonPos = buffer.indexOf(':');
    if (colonPos == -1) continue; // 跳过无冒号的无效行

    String key = buffer.substring(0, colonPos);
    key.trim(); // 清除键名前后的空格
    String valueStr = buffer.substring(colonPos + 1);
    valueStr.trim(); // 清除数值前后的空格

    // 根据键名赋值到对应变量
    if (key == "SampleTime") {
      sampleTime = valueStr.toInt();
    } else if (key == "SampleInterval") {
      sampleInterval = valueStr.toInt();
    } else if (key == "Phone") {
      phone = valueStr;
    }
  }

  printFile.close(); // 操作完成后关闭文件

  // 打印读取结果用于调试
  Serial.println("读取到的参数:");
  Serial.print("SampleTime: ");
  Serial.println(sampleTime);
  Serial.print("SampleInterval: ");
  Serial.println(sampleInterval);
  Serial.print("Phone: ");
  Serial.println(phone);
}

void loop() {
  // 主程序逻辑写在这里
}

关键步骤说明

  • 逐行读取:用readStringUntil('\n')读取完整一行,确保获取完整的键值对,避免只读到冒号就中断。
  • 清除空白字符:调用trim()处理键名和数值前后的空格、换行符,解决SampleInterval : 1000这种带空格的格式问题。
  • 拆分键值:通过indexOf(':')找到冒号位置,用substring()拆分出键和值字符串。
  • 类型转换:整数类型的参数用toInt()转换,字符串类型直接赋值。
  • 关闭文件:操作完成后必须调用close()释放SD卡资源,避免后续读写异常。

内容的提问来源于stack exchange,提问作者dachu darshan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:35:15