簡體   English   中英

通過串行端口發送字節-自定義類python

[英]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 00001111 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM