2016-06-30 7 views
0

私はC++で書かれたコードを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; 
    } 

動作しません、私はPythonで書かれているコードを、このです:

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

rightWheelの最初のバイトは、正しいデータが含まれているようだが、2番目のバイトはありません。 rightWheel [1]に1バイトを格納したいが、それはしない。

どのようなPythonコードを使用すると、右に5ビットシフトされた変数を含む1バイトを設定し、0x7Fでビット単位でアンドされますか?

+0

あなたは例の入力と出力を提供することができますか?あなたのコードは正しく見え、わたしにとっては賢明な結果が得られます。 – MisterMiyagi

+0

コードを確認していただきありがとうございます。私はサンプルの入出力を作成するために行ったとき、問題を引き起こしていたテストコードに問題があることがわかりました。だから私のコードは確かに正しいです。 – Daanii

+0

私の答えに記載されているように、問題はまだ残っていました。 – Daanii

答えて

1

問題は私の最初のコード行にありました。私はこれを持っていた:

rightWheel = bytearray(b'\xc000') 

しかし、それは0ごとに1つのバイトのASCII文字として右端の2個の0を取って、3バイトにrightWheelを作っていました。右のホイールはb '\ xc0 \ x30 \ x30'になりました。

このコードの修正最初の行が正しく動作:

righWheel = bytearray(b'\xc0\x00') 
関連する問題