0

pyserialを使用してPythonをハードウェアディスプレイと通信させるのに問題があります。ディスプレイの機能の中には、コマンドの後に引数として署名された単語を送信する必要があるものがあります(つまり、ディスプレイ画面のXまたはY)。

以前はchr()を使用してきましたが、これは255未満の数値でのみ機能します。

私は変換のために以下を試しましたが、それはいくつかの奇妙な結果をもたらし、設定された位置から物事を大きく外します:

def ByteIt(self,data):
    datastring = str()
    for each in tuple(str(data)):
        datastring = datastring + chr(int(each))
    return datastring

私はここで自分自身から離れているかもしれません:)

私がそれをどのように使うかの例:

x = 100
y = 350
serial.Write('\x01' + ByteIt(x) + ByteIt(y)) # command , xpos , ypos

これを行うと、x100、y350に配置されないため、ほとんどの場合、ディスプレイがクラッシュします:(

これを適切に行うためのヒントはありますか?

4

2 に答える 2

2

structモジュールについてお読みください。

http://docs.python.org/library/struct.html

すべての「chr」などを適切なstruct.pack()呼び出しに置き換えます。

具体的には

bytes = struct.pack( 'h', some_data )

あなたに「署名された言葉」を与えるべきです。

于 2010-07-22T18:45:21.457 に答える
0

「pack」と「unpack」に関するドキュメントを再度改訂することをお勧めします。適切な大文字または小文字を選択すると、エンディアンを指定できます。したがって、デバイスで完全に機能しなかった上記の例に基づいて、次のことが必要だと思います。

x = 100
y = 350
serial.Write('\x01' + 
             struct.pack('>hh', x) + 
             struct.pack('>hh', y)) # command , xpos , ypos
于 2013-02-02T10:08:36.943 に答える