PySerial没有正确写入数据?

2024-09-28 20:51:07 发布

您现在位置:Python中文网/ 问答频道 /正文

背景:我正在进行一个临床研究项目,在这个项目中,我正在使用ML算法来操作伺服系统,这些伺服系统可以控制将光纤放入前列腺癌患者前列腺中进行光动力治疗的深度。我得到了一个Arduino,因为我的其他I/O设备正在用于其他项目。在

我必须把我的Arduino和Python连接起来,因为我需要从一些纤维中(从病人的前列腺)收集光谱数据。在

发送和接收ASCII数据本身工作得很好,但是尝试从Python前端发送数据来运行伺服系统却失败得很惨。例如(下图),尝试将伺服臂旋转45度会导致伺服在一个方向上晃动,前后移动两次,然后停在其静止位置。在

Python前端:

import serial
import time
import sys

def create_serial_object():
    try:
        serial_object = serial.Serial(
        port='COM3',\
        baudrate=9600,\
        parity=serial.PARITY_NONE,\
        stopbits=serial.STOPBITS_ONE,\
        bytesize=serial.EIGHTBITS,\
        timeout=1)
        print("Connected to: " + serial_object.portstr)
        time.sleep(2)
        return serial_object
    except Exception as exception:
        if exception == 'SerialException':
            serial_object.close()
            sys.exit(exception)


ser=create_serial_object()
time.sleep(1)

if __name__ == '__main__':       
    try:
        data=45
        data=str(data).encode('ascii')
        print('We are sending: ',data)
        ser.write(data) # sends data to Serial.read();
        time.sleep(0.2);                  
        data=ser.readline().decode('ascii') # receives data from 
        Serial.println();
        print('We are receiving: ',data)

        ser.close()
    except:
        ser.close()

以及.ino后端:

^{pr2}$

独立运行.ino后端可以正常工作。伺服臂旋转45度,然后按预期迅速返回驻车位置。在

我猜传入的pyserial数据没有被.ino脚本正确解码。我尝试过刷新输入和输出缓冲区。在


Tags: 数据项目importclosedataobjecttimeserial