0

我有一个 Arduino 通过 USB 连接到我的计算机。我的流线型服务必须获取这些数据并将其可视化。这是负责连接到端口然后获取数据的代码。

port_name = st.selectbox("Select PORT", [port.device for port in list_ports.comports()])
start_button = st.empty()
dataframe_widget = st.dataframe([])

if start_button.button('Start', key='start'):
    serialPort = serial.Serial(port=port_name, baudrate=115200,
                               bytesize=8, timeout=2, stopbits=serial.STOPBITS_ONE)
    start_button.empty()
    if st.button('Stop', key='stop'):
        serialPort.close()
        pass
    else:
        while 1:
            if serialPort.in_waiting > 0:
                serialString = serialPort.readline()
                new_data = list(map(int, serialString.decode('Ascii').split()))
                dataframe_widget.add_rows(new_data)

当用户单击停止按钮时会出现问题。由于某种原因,该端口没有关闭,并且在不停止整个 Python 进程的情况下无法再次连接到它。如何在没有这些问题的情况下正确连接到端口?

4

1 回答 1

0

在我看来,你的 while 循环永远不会被打破..

我会期待这样的事情:

programm_running = True
listening = False

while programm_running:
    if start_button.button('Start', key='start'):
        serialPort = serial.Serial(port=port_name, baudrate=115200,
                bytesize=8, timeout=2, stopbits=serial.STOPBITS_ONE)
        listening = True

    if exit_button.button('Exit', key='exit'):
        programm_running = False
    
    while listening:
        if serialPort.in_waiting > 0:
                serialString = serialPort.readline()
                new_data = list(map(int, serialString.decode('Ascii').split()))
                dataframe_widget.add_rows(new_data)
        if stop_button.button('Stop', key='stop'):
            serialPort.close()
            listening = False
于 2021-01-22T16:35:24.907 回答