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 }
关键修正点
- 字符转整数:用
c - '0'将ASCII数字字符转换成对应的整数,比如'1' - '0' = 1。 - 过滤非数字字符:用
isdigit(c)判断读取的字符是否是数字,跳过换行符、空格这类非数字内容。 - 打印方式调整:用
Serial.println()代替Serial.write()来打印数字,这样会输出数字的文本形式,而不是ASCII字符。
内容的提问来源于stack exchange,提问作者Wicaledon
相关产品推荐
相关产品推荐

