2013-08-10 3 views
2

저는 Arduino 프로젝트에서 일하고 있으며 arduino Serial 이벤트로 Serial port에서 일부 명령을 수신하고 싶습니다. 그러나 그것은 항상 일련의 이벤트가 완료되었음을 모르는 코드를 작성하는 조건을 충족시키지 않습니다. 여기 내 코드가있다.Arduino 직렬 이벤트가 반환되지 않습니다.

void serialEvent() { 
    while (Serial.available()) { 
    // get the new byte: 
    char inChar = (char)Serial.read(); 
    if (inChar == '`') 
    { 
     // add it to the inputString: 
     inputString += inChar; 
     // if the incoming character is a newline, set a flag 
     // so the main loop can do something about it: 
     if (inChar == '|') { 
      settingsReceived = true; // <----- This will never be called 
      Serial.println("true"); // <------ Nor this will too 
     } 
    } 
    } 
} 

나는 시리얼 모니터에서 문자열 `Hello|을 전달하려고했습니다 아직이 응답하지 않습니다. 또한 Line endingNo Line EndingNewline으로 시도했지만 아직 작동하지 않습니다. 아무도 도와 줄 수 있습니까? 감사!

답변

2

Serial.read()은 시간당 바이트를 읽습니다. 예를 들어 `Hello|은 "숯 아니다 | 처음 그래서

` H e l l o | 

if (inChar == '` ')는 (H는, E, L, L은 O), 따라서 제 숯으로부터 그러나, 내부의 동작을 입력하는 사실 ``, 의미는 if (inChar == ' ')는 사실이 아니며, 그 이후의 조건을 입력하게하지 않습니다.

void serialEvent() { 
    if (Serial.available()) 
    { 
     char inChar = (char)Serial.read(); 
     if (inChar != '`') 
     { 
     return; // <----- Rejecting the char if not starting with ` 
     } 
    } 

    while (Serial.available()) { 
    // get the new byte: 
     char inChar = (char)Serial.read(); 
    // add it to the inputString: 
     inputString += inChar; 
    // if the incoming character is a newline, set a flag 
    // so the main loop can do something about it: 
     if (inChar == '|') { 
     settingsReceived = true; 
     Serial.println("true"); 
     } 

    } 
} 
+0

재미 있고, 하드웨어의 멋진 작은 조각! – JackCColeman

+0

haha ​​itz true;] –

1

inputstring이 스케치에 정의되어 있습니까? 또한 loop()setup()에는 몇 가지 작업을 완료해야합니다. 참조 : http://arduino.cc/en/Tutorial/SerialEvent이 페이지는 좋은 시작 예제를 가지고 있습니다. 먼저 작동시키고 특정 코드에 맞게 수정하십시오.

"Hello |"를 입력하면 Enter 키를 누르면 '|' 에 대한? '\ n'을 줄 종료 문자로 테스트하지 않는 이유가 있습니까?

또한 inChar == '`'를 테스트 한 다음 문자열에 추가하지만 "Hello"를 입력하고 있습니까? 직렬 I/O는 한 번에 한 문자 씩 전달되므로 입력 된 inChars를 허용해야합니다.

+0

안녕 @JackCColeman,'inputstring'이 예는 수정 한 후 그러나 잘 작동합니다 ... 난 이미 예를 들어 다음과 같은있어, 세계적으로 정의되어 있습니다 : 여기

그 일의 propoer 방법이어야한다 그림과 같이 작동하지 않습니다 ... –

+0

@Matthew, 자세한 정보 요청에 대한 답변을 업데이트했습니다. – JackCColeman

+0

도움을 주셔서 감사합니다. 문제를 파악한 후 친절하게 답변을 검토하십시오! 감사!!! –

관련 문제