2017-01-20 6 views
2

カスタムクラスのPythonスクリプトを使用してシリアルポート経由でバイト(好ましくは0000 0001)を送信したいと思いますが、残念ながらBasicのバックグラウンドでPythonを初めて使用しています。私は、今放っておいた同僚のラボPCで見つけた試みのコードを以下に含めました。シリアルポートでカスタムクラスのPythonを送信する

私が知ることから、pulseValueの内容が送信されます。しかし、私が使用しているeyetrackingプログラムでpulseValueを'1'に設定すると、複数のビットが送信されます。私はプログラムがpulseValueを設定する必要があると思う、そうでなければ私はwrite(bytes(*something*))と思う。

私はそれが私がそれをするのに必要なことをするような何かに見えるかどうか私は疑問に思っていましたか?

import sreb 
import serial 

class pulseSend(sreb.EBObject): 

    def __init__(self): 
     sreb.EBObject.__init__(self) 
     self.serial = serial.Serial(0) 

    def sendPulse(self,pulseValue): 
     """RETURN:0""" 
     self.serial.write(pulseValue) 


     return 0 
+0

私はあなたの値下げは少しオフだったかなり確信している - 私は少し明確にするためにあなたの質問を更新しました。これが正しくない場合は、いつでもあなたの質問に戻って[編集]することができます。 –

答えて

0

'1'そうそう、複数のビットセットがあります、これはバイナリでは01000001です(ASCIIコード65を持っている)文字1を含む文字列、数ではなく1です。あなたの要件はあまり明確ではありませんが、私はあなたが最低ビットだけがセットされたキャラクタにchr(1)と書いてほしいと思います。文字のビット値をより明確にするには、chr(0x01)(16進数)または​​3210(2進数)を書き込むことをお勧めします。

0

あなたのコードを呼び出しているどのようにあなたの質問は正確に欠けている、私はあなたがこのような何かをやったと仮定しています:

言及jasonharper
sender = pulseSend() 
sender.sendPulse('1') 

として、あなたが送っているので、それは間違っていますテキスト 。テキストは通常​​ASCIIエンコーディングです(Python3ではUTFです)。 ASCIIでは、文字を作成するために0〜255(または0000 00001111 1111)の数字が使用されます。あなたは、実際の整数値を送信することができた場合はそれは素晴らしいことだ、

>>> ord('1') 
49 

sender.sendPulse(1) 

しかし、あなたはまた、jasonharperとして(その場合には、できないことがあります文字'1'は実際には整数49でありますあなたはchrで行うint値をその文字値に変換したいでしょう。ここでは、「バイナリ0000 0001に対応した文字列を送信する」書くことができ、いくつかの異なる方法があります:

sender.sendPulse('\x01') # using the hex escape code 
sender.sendPulse(chr(1)) # the integer 1, so `1111 1111` would be 255 
sender.sendPulse(chr(0x01)) # hex literal 
sender.sendPulse(chr(0b01)) # Binary literal. Could also be 0b00000001. You could use `0b0000_0001` or `0b_0000_0001` in Python 3.6+ 
+0

私はそれが当てはまるかもしれないと思ったが、文字1ではなく '0000 0001'を送る方法がわからなかった。アイトラッカーのGUIに' pulseValue'を割り当てる必要があります。 'sender .sendPulse(pulseValue) '残念ながら。この値を 'self.serial.write(chr(pulseValue))'のようなものに変換する方法はありますか? (もちろん、この例では '1111 1111 'を送るでしょう)。 –

+0

あなたの例を使うことができればはるかに簡単ですが、変数 'pulseValue'を何らかの形でクラスに渡す必要があると思うのは間違いありませんか? –

+0

アップデート:私はちょうどシリアルポートテスターを使いましたが、COM1ポートをコンピュータ上で正しく設定したにもかかわらず、別のソフトウェアの方法ではまだ別のビットレートなどを使用していることに気付きませんでした。ポートテスターを設定した後、引き金を引く必要があるため、さまざまな文字を区別することができ、優れています。 'self.serial.write(chr(pulseValue))'はうまくいくはずですが、私は現在いくつかのPythonライブラリエラーを受けています。一度動作したら更新されます! –

関連する問題