我正在尝试使用python来传达Arduino。我能够使用serial
模块连接它。这是代码:
import serial
while True:
print "Opening port"
arduinoData = serial.Serial("com7", 9600)
print "The port is open"
while (arduinoData.inWaiting()==0): #I wait for data
print "There is no data"
print "Reading data"
arduinoString = arduinoData.readline()
print arduinoString
当我想要读取数据时,似乎悬挂在arduinoString = arduino.readline()
的行中。
可能是什么问题?
答案 0 :(得分:1)
使用while循环内部的while循环,你可以使用if else语句。另外,要读取数据,您可以使用read函数和arduinoData.inWaiting()作为参数,如下所示:arduinoData.read(arduinoData.inWaiting())
。我希望这段代码可以帮到你:
arduinoData = serial.Serial("com7", 9600)
while True:
if arduinoData.inWaiting() > 0: # check if there is data available
print "Reading data"
arduinoString = arduinoData.read(arduinoData.inWaiting()) '''read and decode data'''
print arduinoString
else:
print "There is no data"
答案 1 :(得分:1)
您的代码结构很奇怪。通过在函数中创建Serial对象而不使其全局化,我遇到了类似的问题。也许你应该将这一行放在循环之外:
arduinoData = serial.Serial(“com7”,9600)
此外,您的初始化似乎有点轻。我通常使用更多参数,但这取决于你的硬件。
ser = serial.Serial(
port = 'com4', \
baudrate = 19200, \
parity=serial.PARITY_NONE, \
stopbits=serial.STOPBITS_ONE, \
bytesize = serial.EIGHTBITS, \
timeout = 0.25)
readline()问题的解决方法是使用 read()函数,并检查它是否包含数据。
希望它会有所帮助!
答案 2 :(得分:0)
好的,您收到了AttributeError: 'Serial' object has no attribute 'ser'
错误,因为实际上ser
对象中不存在arduinoData
。这是我的错,因为我在考虑我在包含ser的程序中创建的类,它只是另一个串行对象。要解决此问题,只需将arduinoData.ser
替换为arduinoData
要添加,您应该在while循环之外声明arduinoData
。你应该这样做,因为每次你创建一个串行对象时,连接到Arduino需要时间。为此,您的程序可能无法读取数据。
我希望这个答案可以帮到你。