通过串口发送一个字节 - 自定义类python

时间:2017-01-20 17:56:33

标签: 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

2 个答案:

答案 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 00001111 1111)来创建字符。字符'1'实际上是整数49:

>>> ord('1')
49

如果您可以发送实际的整数值,那就太棒了:

sender.sendPulse(1)

但是你可能无法在这种情况下(正如jasonharper所提到的那样)你想要将int转换为它的{/ 1}}字符值。这里有一些不同的方法可以写“发送对应于二进制chr的字符串”:

0000 0001