小编Gep*_*ado的帖子

如何在Python中将整数的两个字节转换回整数?

我目前正在使用一个Arduino整数(int)通过串行(使用pySerial)输出到我正在编写的Python脚本,Arduino以便与X-Plane飞行模拟程序进行通信.

我设法将原始文件分成两个字节,以便我可以将它发送到脚本,但是我在重建原始整数时遇到了一些麻烦.

我尝试使用基本的按位运算符(<<,>>等),就像我在类似C++的程序中所做的那样,但它似乎没有用.

我怀疑它与数据类型有关.我可能在相同的操作中使用带有字节的整数,但我无法确定每个变量的类型,因为你并不真正在Python中声明变量,据我所知(我对Python很新) .

self.pot=self.myline[2]<<8
self.pot|=self.myline[3]
Run Code Online (Sandbox Code Playgroud)

python byte serial-port arduino

3
推荐指数
2
解决办法
1万
查看次数

当我用Python刷新串行缓冲区时,它会停止读取

我编写了一个Arduino来将数据串行发送到我的电脑.pySerial正在从串口中正确读取,但由于我总是希望获得最新的信息,我以为我可以使用flushInput()刷新输入缓冲区,但是当执行命令时,我再也无法读取连载.我尝试每次只刷一次51次(因为51是一个素数,我可以很容易地用计数器计数51次而不必重置它),这样Arduino就有足够的时间发送下一个数据包(运行在57600波特) ),但仍然无法正常工作.也就是说,我使用了一个变量来使用deadline()来存储读取行的长度,但是,一旦我达到51并且输入缓冲区被刷新,我总是得到0的读数,这意味着它不会读取任何内容.我已经阅读了pySerial的文档,但没有找到任何相关信息.flushInput()也会终止串行连接吗?非常感谢.

编辑:我正在运行Mac OS 10.7.5和Python 2.7.3

try:
    self.s = serial.Serial("/dev/tty.usbmodemfa131", 57600, timeout = 0)
    self.FlightLoopCB = self.FlightLoopCallback
    XPLMRegisterFlightLoopCallback(self, self.FlightLoopCB, self.interval, 0)
except serial.SerialException:
    self.s = None
    .
    .
    .

    self.length=0
    self.myline=self.s.readline()
    self.length=len(self.myline)
    print "Test: %i %i" % (self.length, self.j)
    if(self.length>=7):
        if(self.myline[0:2]=="R,"):
            if(self.j%51==0):
                self.s.flushInput()

            self.length=len(self.myline)
            self.myline=self.myline[2:6]
            self.myLineBytes=[0,0]

            self.myLineBytes[0]=unpack('>H', self.myline[0:2])
            self.myLineBytes[1]=unpack('>H', self.myline[2:4])
Run Code Online (Sandbox Code Playgroud)

python serial-port arduino pyserial

1
推荐指数
1
解决办法
1万
查看次数

标签 统计

arduino ×2

python ×2

serial-port ×2

byte ×1

pyserial ×1