python-3.x Pyserial将数据写入串行端口

68de4m5k  于 2022-12-01  发布在  Python
关注(0)|答案(1)|浏览(151)

这是我第一次使用pyserial。我用pysimplegui做了一个简单的图形用户界面,现在我想把滑块上的数据写到串行监视器上。我该怎么做呢?

import PySimpleGUI as sg
import serial

font = ("Courier New", 11)
sg.theme("DarkBlue3")
sg.set_options(font=font)

ser = serial.Serial("COM6")
ser.flushInput()

layout = [
    [sg.Text("X"), sg.Slider((0, 360), orientation='horizontal', key='SLIDER_X')],
    [sg.Text("Y"), sg.Slider((0, 360), orientation='horizontal', key='SLIDER_Y')],
    [sg.Text("Z"), sg.Slider((0, 360), orientation='horizontal', key='SLIDER_Z')],
    [sg.Push(), sg.Button('Exit')],
]

window = sg.Window("Controller", layout, finalize=True)
window['SLIDER_X'].bind('<ButtonRelease-1>', ' Release')
window['SLIDER_Y'].bind('<ButtonRelease-1>', ' Release')
window['SLIDER_Z'].bind('<ButtonRelease-1>', ' Release')

while True:
    event, values = window.read()
    if event in (sg.WINDOW_CLOSED, 'Exit'):
        break
    elif event == 'SLIDER_X Release':
        print("X Value:", values["SLIDER_X"])
    elif event == 'SLIDER_Y Release':
        print("Y Value:", values["SLIDER_Y"])
    elif event == 'SLIDER_Z Release':
        print("Z Value:", values["SLIDER_Z"])

    data = values["SLIDER_X"], values["SLIDER_Y"], values["SLIDER_Z"]

    print("String:", data)

window.close()
ser.close()

如果我就这么做

ser.write(data)

出现错误:

TypeError: 'float' object cannot be interpreted as an integer

我只想把数据写到串行端口,这样我就可以用Arduino读取它了。

fjnneemd

fjnneemd1#

这里的代码有两个问题:
1.变量data的类型为元组,而不是数字。
1.如TypeError所示,元组的每个成员都是浮点数。
您需要一次向ser.write传递一个值,并且需要将滑块小部件返回的浮点数转换为整数,如下所示:

data = int(values["SLIDER_X"])
ser.write(data)

相关问题