>

SoftwareSerial 라이브러리를 사용하여 직렬 통신 (RX, TX)을 사용하여 NODEMCU와 Arduino Uno와 통신하려고합니다.

내 코드는

int count;
char reqst[] = " ";
void setup() {
  Serial.begin(115200);    
  Serial.println("Ready");
}
void loop() {
 while ( Serial.available() > 0 )  { 
  char inChar = Serial.read();
  reqst[count] = inChar;
  count++;
     if (inChar == '\n') {
        Serial.print("String: ");
        Serial.println(reqst);
        count = 0;
        delay(1000);
     }
 }

}

여기서 직렬 모니터의 출력이 표시됩니다;

문자열 : aj 779

문자열 : am 779

NODEMCU에서 올바른 문자열을 보내고 있지만 Arduino Uno에 있는지 확인했습니다. 숫자 "779"는 아무데도 나오지 않습니다.

그래서 내 문제는 원하는 문자열에 따라 기능을 실행할 수 없다는 것입니다. 왜 숫자가 문자열 아래에 오는지 알 수 있습니까?.

  • 답변 # 1

    char reqst[] = " ";
    
    

    여기서 두 문자 길이의 배열을 만들었습니다. 그러나 이러한 문자 중 하나는 널 종료 자에 사용해야하므로 실제로는 단일 문자 길이 인 문자열 만 보유 할 수 있습니다. 배열의 끝을 지나서 쓰면 정의되지 않은 동작이 발생합니다. 이것은 이상한 결과의 원인 일 가능성이 큽니다. 널 종료자를 포함하여 수신 할 수있는 문자열을 포함 할 수있을만큼 reqst [] 크기를 조정해야합니다. 배열의 끝을 쓰지 않고 항상 null 종료 자로 끝나도록 코드를 추가해야합니다.

    간단한 예제 일 뿐이지 만 게시 한 코드에는 들어오는 문자를 저장할 필요가 없습니다. 대신받은대로 인쇄 할 수 있습니다.

  • 이전 command line - ConEmu를 사용하여 cmd 창에서 여러 프로세스 실행
  • 다음 arduino - 사용자 정의 콜백 함수에 변수를 전달하는 방법