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

Arduino从SD卡读取文本整数并求和问题求助

问题分析与代码修正:SD卡读取整数并求和失败

嗨,我来帮你找出问题所在并修正代码~你的核心问题出在对文件读取返回值的理解和数据类型转换上,具体来说:

问题根源

  • myFile.read() 读取的是文件中字符的ASCII码值,不是文本里的整数数值。比如你文件里的1对应的ASCII码是49,换行符对应的ASCII码是10,所以你的total会被计算成 3 + 49 + 10 = 62,而不是你预期的3+1=4。
  • Serial.write(total) 是输出对应ASCII码的字符,不是打印数字。比如数值62对应的ASCII字符是>,这就是你看到“无法工作”的原因。

修正后的代码

下面是调整后的代码,我加入了字符转整数的逻辑,并且跳过非数字的换行符:

#include <SD.h>
#include <SPI.h>
File myFile;
int pinCS = 53; // Pin 10 on Arduino Uno
int total = 3;

void setup() {
  Serial.begin(9600);
  pinMode(pinCS, OUTPUT);

  // SD Card Initialization
  if (SD.begin()) {
    Serial.println("SD card is ready to use.");
  } else {
    Serial.println("SD card initialization failed");
    return;
  }

  // Reading the file
  myFile = SD.open("test.txt", FILE_READ);
  if (myFile) {
    Serial.println("Read:");
    int readNum = 0;
    // 读取文件内容,只处理数字字符
    while (myFile.available()) {
      char c = myFile.read();
      // 判断是否是数字字符
      if (isdigit(c)) {
        // 将ASCII字符转换为整数:'0'的ASCII是48,所以减去48得到对应数字
        readNum = c - '0';
        total += readNum;
        Serial.print("读取到整数: ");
        Serial.println(readNum);
      }
    }
    myFile.close();
    // 打印最终求和结果
    Serial.print("最终total值: ");
    Serial.println(total);
  } else {
    Serial.println("error opening test.txt");
  }
}

void loop() {
  // empty
}

关键修正点

  1. 字符转整数:用 c - '0' 将ASCII数字字符转换成对应的整数,比如'1' - '0' = 1。
  2. 过滤非数字字符:用isdigit(c)判断读取的字符是否是数字,跳过换行符、空格这类非数字内容。
  3. 打印方式调整:用Serial.println()代替Serial.write()来打印数字,这样会输出数字的文本形式,而不是ASCII字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:22:46