我正在尝试使用卡模块从我的Arduino Mega 2560中的串行端口写入SD卡。
我希望能够在txt文件中写入我在串口com中输入的内容。
#include <SPI.h>
#include <SD.h>
const int chipSelect = 4;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.print("This is a test and should be ignored");
if (!SD.begin(chipSelect)) {
Serial.println("\nCard failed, or not present");
// don't do anything more:
return;
}
else{
Serial.println("\ncard initialized.");
}
}
void loop() {
// put your main code here, to run repeatedly
File OpenFile = SD.open("test.txt", FILE_WRITE);
if(OpenFile and Serial.available());
{
OpenFile.println(Serial1.read());
OpenFile.close();
}
}
然而,连续的&#34; -1&#34;和&#34; 1&#34;,没有&#34;,写入SD。
是的,我可以通过其他方式写入SD卡......
干杯,PoP
答案 0 :(得分:0)
我注意到您正在检查Serial.available()
,但使用序列号 1 来阅读:)
由于您有Mega,因此Serial
和Serial1
不会出现错误。我说这是你的罪魁祸首!
当没有数据时,Stream
读取函数将返回-1。此外,您可以减轻Arduino的负载并立即执行操作(不是每个字节打开/关闭)并清除所有可用数据(Serial.read()
只读取一个字节,以防您不知道)。 / p>
void loop() {
File OpenFile = SD.open("test.txt", FILE_WRITE);
if(OpenFile){
while(Serial.available()){
OpenFile.println(Serial.read());
}
OpenFile.close();
}
}
您可能想要检查SD lib是否支持默认附加或FILE_APPEND
之类的标记,因为如果有更多数据可用,您将在下一个循环中覆盖该文件(串行数据不是即时的,您的代码可以在接收其余数据时循环)。