2013-05-13 4 views
0

내 PC와 마이크로 컨트롤러 (MC)간에 통신을 시도하고 있습니다. 내 마이크로 컨트롤러는 getchar()을 사용하여 4 문자를 읽거나 문자 '\0', '\' 또는 '\r'으로 바뀔 때까지 읽습니다.마이크로 컨트롤러에 쓸 Pyserial 문자열 - 바이트 인코딩

하이퍼 터미널로 통신이 완벽하게 작동합니다. 그러나, 내 python 스크립트 '\0', '\', 또는 '\r' 보낼 때 입력 된 문자열을 인코딩하고 하나의 특수 문자로 연결하는 것 같습니다.

command = input("Enter Command: ") 
port.write(bytes(command + '\n', 'UTF-8')) 

그래서 명령 x를 입력 한 경우는 'x''\n'를 전송해야하며, MC는 더 많은 문자 때문에 새로운 라인의 읽기를 기다리는 중지해야합니다. 그러나 x 만 입력하면 MC는 4 자 이상 읽을 수 있습니다.
문자열을 특수 문자와 올바르게 바이트로 변환하려면 어떻게해야합니까? 감사.

엠씨 코드 :

map(ord,command+'\n') 또는 bytearray(command+'\n',"UTF-8")

경우 :

buffer[ii] = getchar(); 

while(buffer[ii] != '\0' && buffer[ii] != '\n' && buffer[ii] != '\r' && ii < 4 - 1) 
{ 
    buffer[++ii] = getchar(); 
} 

답변

1

둘 중 의해 정수 배열로 0 < = N < = 256 문자열을 변환 할 포트에 각 바이트를 하나씩 작성해야했습니다.

>>> for b in bytearray("message\n","UTF-8"): 
...  port.write(b) 

트릭을해야합니다.

+0

감사합니다. 그래서 한 번에 1 바이트를 보내야했지만 10 밀리 초의 지연도 추가해야했습니다. 하이퍼 터미널이 한 번에 한 바이트 씩 보내는 동안 파이썬은 한 번에 전체 메시지를 보냅니다. getchar()은 첫 번째 char을 보았고 나머지 데이터는 pyserial로 손실되었습니다. 위의 for 루프 코드에 대한 한 가지 작은 변경 사항은 b가 먼저 바이트로 변환되어야한다는 것입니다. – roverred