![](/img/trans.png)
[英]python2 to python3 differences with byte additions and sending to serial port
[英]Sending a byte through the serial port - custom class python
我想使用自定義類Python腳本通過串行端口發送一個字節(最好是0000 0001
),但是不幸的是,我是Python的新手,在Basic中具有背景知識。 我將下面的代碼包含在我已經離開實驗室的同事在實驗室PC上的一次嘗試中。
據我所知,pulseValue的內容將被發送。 但是,當我在使用的眼動跟蹤程序中將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
'1'
是一個字符串,包含字符1(具有ASCII碼65),而不是數字1。這是二進制的01000001,所以是的,設置了多個位。 您的要求不是很明確,但是我想您要為僅設置最低位的字符編寫chr(1)
。 您可能更喜歡寫chr(0x01)
(十六進制)或chr(0b00000001)
(二進制)以使字符的位值更清晰。
您的問題完全缺少您如何調用代碼,但是我假設您已經完成了以下操作:
sender = pulseSend()
sender.sendPulse('1')
正如jasonharper提到的,這是錯誤的,因為您正在發送文本 '1'
。 文本通常是ASCII編碼(盡管在Python3中是UTF)。 ASCII使用數字0-255(或0000 0000
到1111 1111
)創建字符。 字符'1'
實際上是整數49:
>>> ord('1')
49
如果您可以發送實際的整數值,那就太好了:
sender.sendPulse(1)
但是您可能無法這樣做(就像jasonharper提到的那樣),您將需要將int轉換為它的字符值,這可以使用chr
。 您可以通過以下幾種不同的方式編寫“發送與二進制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+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.