2016-07-09 3 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

난 당신이 1 :

A로부터 읽어 Serial.available()을 확인하지만, 직렬 사용주의 당신은 메가가 있는데, SerialSerial1이 있기 때문에 오류가 발생하지 않습니다. 나는 이것이 당신의 범인이라고 말할 것입니다!

Stream 데이터가 없을 때 read 함수는 -1을 반환합니다. 또한 Arduino의로드를 줄여 한 번에 작업을 수행하고 (각 바이트에 대해 열거 나 닫지 않음) 사용 가능한 모든 데이터를 제거 할 수 있습니다 (알 수없는 경우에 한해 Serial.read()은 단일 바이트 만 읽음).

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로되어 있습니다 (Code는 다른 comp ...에 있습니다). 누구든지 장래에 도움이 필요한 경우 serial.read를 char로 구문 분석해야합니다. – PoP

+0

@PoP 답변으로 질문을 해결할 수 있다면 투표를 추가하거나 답변으로 선택하는 것이 좋습니다. 건배 –