我想使用自定义类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
答案 0 :(得分:0)
'1'
是一个字符串,包含字符1(具有ASCII码65),而不是数字1.这是二进制的01000001,所以是的,设置了多个位。你的要求不是很清楚,但我认为你想为只有最低位设置的字符写chr(1)
。您可能更喜欢编写chr(0x01)
(十六进制)或chr(0b00000001)
(二进制)来使字符的位值更清晰。
答案 1 :(得分:0)
你的问题遗漏了你如何调用你的代码,但我假设你做了类似的事情:
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转换为它的{/ 1}}字符值。这里有一些不同的方法可以写“发送对应于二进制chr
的字符串”:
0000 0001