2016-06-30 3 views
0

저는 Python으로 번역하는 C++로 작성된 코드를 가지고 있습니다.Python에서 직렬 연결을 통해 데이터를 설정하고 전송하기

WriteBuffer[0] = unsigned char (0xc0 + (Steer & 0x1F));   // change the signal to conform to jrk motor controller 
    WriteBuffer[1] = unsigned char (Steer >> 5) & 0x7F;    //  two-word feedback signal 

    if(!WriteFile(hSerial[1], &WriteBuffer, 2, &BytesWritten, NULL)){ 
     //error occurred. Report to user. 
     cout<<"error writing T2 \n"; 
     cout<<BytesWritten; 
    } 

나는이 작동하지 않는 파이썬에서 작성한 코드는, 이것이다 : :이 C++ 코드는

rightWheel = bytearray(b'\xc000') 
rightWheel[0] = rightWheel[0] + (rightWheelSteer & 0x1F) 
rightWheel[1] = (rightWheelSteer >> 5) & 0x7F 
rightWheel = bytes(rightWheel) 
ser2.write(rightWheel) 

rightWheel의 첫 번째 바이트가 올바른 데이터를 포함 할 것 같다,하지만 두 번째 바이트는 그렇지 않습니다. rightWheel [1]에 1 바이트를 포함 시키길 원하지만, 그렇지 않습니다.

어떤 Python 코드를 사용하면 오른쪽으로 5 비트 이동 한 다음 0x7F로 비트 단위로 이동 한 단일 바이트를 설정할 수 있습니까?

+0

당신은 예를 들어, 입력과 출력을 제공 할 수 있습니까? 귀하의 코드가 올바르게 보이고 나에게 합리적인 결과를 만들어냅니다. – MisterMiyagi

+0

코드를 확인해 주셔서 대단히 감사드립니다. 예제 입출력을 만들려고 할 때 문제를 일으키는 테스트 코드에 문제가 있음을 발견했습니다. 그래서 내 코드가 실제로 맞습니다. – Daanii

+0

아래의 답변에 언급 된 바와 같이 여전히 문제가있었습니다. – Daanii

답변

1

문제는 첫 번째 코드 줄에있었습니다. 나는이 있었다 :

rightWheel = bytearray(b'\xc000') 

을하지만 그 공 각각 1 바이트 ASCII 문자로 맨 오른쪽이 0을 복용, 3 바이트로 rightWheel을했다. 그래서 오른쪽 바퀴는 b '\ xc0 \ x30 \ x30'이되었습니다.

이 코드 수정 첫 번째 줄은 제대로 작동합니다

righWheel = bytearray(b'\xc0\x00') 
관련 문제