在使用SD卡读取文件时需要帮助

时间:2019-08-22 13:34:15

标签: arduino

我的目标是当我使用Arduino nano在串行监视器上键入文件名时从SD卡读取任何文件。

在下面的代码中,如果我用random.txt更改FileName,它可以工作,但是我试图使用串行监视器来选择所需的文件。

字符串myInput;

#include <SPI.h>
#include <SD.h>

const int cs = 4;
String FileName;
String line;
File file;
void setup()
{
  Serial.begin(9600);
  Serial.print("Initializing card...");
  pinMode(53, OUTPUT);
  if (!SD.begin(cs)) 
  {
    Serial.println("Card failed to initialize, or not present");
    return;
  }
  Serial.println("Card Initialized.");
 }
void loop()
{
  Serial.println();
  Serial.println("Enter File Name.");  

  while (Serial.available()==0)  
  {                                      

  }  
   FileName=Serial.readString(); 
    Serial.println(FileName);

  file = SD.open(FileName);
    if (file) 
  {
    if(file.size()==0)
    {
      Serial.println("file " +FileName+ " is empty");
    }
    else{

    while (file.available())
    {
      Serial.write(file.read());
    }
    file.close();
     Serial.println("Task Complete");
    }
  }  

  else {
    Serial.println("Error, file " +FileName+ "does not exist");
  } 

}

无错误消息。代码有效,只是停留在这一部分-

Serial.println("Enter File Name."); 
while (Serial.available()==0)  
{                                      
}  
FileName=Serial.readString(); 
Serial.println(FileName);

file = SD.open(FileName);

SD卡无法打开我需要的文件。

1 个答案:

答案 0 :(得分:0)

您经常遇到使用串行监视器输入的新手问题。串行监视器根据下拉列表中选择的选项发送行结束符。如果您打印该值,它们会被打印回去,但是谁会注意到输出中还有一个空行。

如果将输入读入String,则可以使用String.trim()函数清除开头和结尾的空白字符。

草图中使用的

readString()将在收到最后一个字符之后等待一秒钟,因为它不知道它是最后一个。您可以使用发送行结束符这一事实来确定输入的结尾。要读取字符串,可以使用Serial.readStringUntil('\n);。这不会读取终止符,但是如果发送了'\ r'(CR)字符,您仍然应该使用trim()删除它。