Arduino和Python之间的串行通信,使用十六进制值的问题

2024-10-03 13:18:33 发布

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

我试图用python3.4中的代码从计算机启动电机,使用pySerial与Arduino Uno通信。我已经将发送的值打包到十六进制,因此每次只有一个字节,但是在Arduino端遇到了一个问题,因为我在Python端发送的是正确的数字。在

PYTHON代码:

import serial 
import struct


ser = serial.Serial(
    port ='COM4', 
    baudrate = 9600, 
    parity = serial.PARITY_ODD, 
    stopbits = serial.STOPBITS_TWO, 
    bytesize = serial.EIGHTBITS
    )

#ser.open()     #opens port 
ser.isOpen()    #returns true?


motorState = 0
wristBend = 'Left'

while True:
    #need to create options to send to arduino

    if wristBend == 'Left':
        motorState = 2
    elif wristBend == 'Right':
        motorState = 3
    else:
        motorState = 1

    motorChar = struct.pack('<B', motorState)          #returns the value as a character interger
    #motorChar = str(hex(motorState))

    print(motorChar)
    ser.write(motorChar)
    print(ser.read())
    break

ARDUINO代码:

^{pr2}$

不仅没有任何东西与我的电路通信,而且我的python代码的输出,我打印出发送到Arduino的内容和从Arduino发送的内容是:

b'\x02'
b'S'

如果我将switch case代码更改为83(ASCII代码S),或者将变量类型更改为byte、int、uint8,那么我得到的输出完全相同。我做错什么了?抱歉,如果这有点明显,我对python和arduino还比较陌生。提前感谢您的帮助!在


Tags: to代码importportserialleftstructarduino
1条回答
网友
1楼 · 发布于 2024-10-03 13:18:33

这里有一个简单的例子,通常从简单开始,然后根据需要增加功能。在

试验_序列号.py在

import serial
ser = serial.Serial("COM4",timeout=5) # everything else is default
ser.write("\x45")
print "RECIEVED BACK:",repr(ser.read(5000))

试验_序列号.ino在

^{pr2}$

相关问题 更多 >