2016-07-09 23 views
0

カードモジュールを使用してArduino Mega 2560のシリアルポートからSDカードに書き込もうとしています。シリアルポートからSDカードに書き込む

シリアルCOMに入力したものをtxtファイルに書きたいと思っています。

#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(); 
    } 
} 

しかし連続の「-1」行と「1」は、「なし、SDに書き込まれます。

はい、私は他の方法でSDカードに書き込むことができています。 ..

乾杯、ポップ

答えて

0

私はあなたがSerial.available()をチェックしますが:)

Aから読み取るためのシリアルを使用している気づきますあなたはメガを持っていますが、SerialSerial1があるので、エラーは発生しません。私はこれがあなたの犯人だと言うでしょう!

Streamデータがない場合、読み取り関数は-1を返します。また、Arduinoの負荷を軽減し、一度に操作(各バイトのオープン/クローズではない)を行い、使用可能なすべてのデータをパージすることができます(Serial.read()は、わからない場合にのみ1バイトを読み取ります)。

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のようなフラグで追加サポートしている場合は、次のループ上のファイルを上書きするよう確認したいことは、(シリアルデータは、あなたのコードのインスタントではありません残りのデータを受信して​​いる間にループする可能性があります)。

+0

これは機能しました。しかしそれはASCIIで書かれています(コードは他のcompにあります...)。将来的に誰かが助けを必要とするなら、あなたはcharでSerial.readを解析する必要があります。 – PoP

+0

@PoP答えがあなたの質問を解決する助けになった場合は、投票を追加するか、答えとして選択することを検討できますか?乾杯 –

関連する問題