我的目标是当我使用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卡无法打开我需要的文件。
答案 0 :(得分:0)
您经常遇到使用串行监视器输入的新手问题。串行监视器根据下拉列表中选择的选项发送行结束符。如果您打印该值,它们会被打印回去,但是谁会注意到输出中还有一个空行。
如果将输入读入String,则可以使用String.trim()
函数清除开头和结尾的空白字符。
readString()
将在收到最后一个字符之后等待一秒钟,因为它不知道它是最后一个。您可以使用发送行结束符这一事实来确定输入的结尾。要读取字符串,可以使用Serial.readStringUntil('\n);
。这不会读取终止符,但是如果发送了'\ r'(CR)字符,您仍然应该使用trim()删除它。