只是一个关于小脚本的快速问题,该脚本由于某种原因无法正常工作
我运行了这个脚本:
import serial
import time
import turtle
def serialreading():
serialPort = serial.Serial(
port="COM5", baudrate=9600, bytesize=8, timeout=2, stopbits=serial.STOPBITS_ONE
)
# Read data out of the buffer until a carraige return / new line is found
serialString = serialPort.readline()
turtlenumber = serialString.decode("Ascii")
# Print the contents of the serial data to ASCII
try:
print(turtlenumber)
except:
pass
def roomview():
t = turtle.Turtle()
t.speed(0) # 1:slowest, 3:slow, 5:normal, 10:fast, 0:fastest
t.forward(turtlenumber)
time.sleep(1)
turtle.reset()
while 1 > 0:
serialreading()
roomview()
海龟的目标是简单地画一条线,只要进入串行通信的数字(其变量是turtlenumber)即可。对于这个例子,数字应该是 1192,但我从来没有看到它的实际情况,因为 shell 告诉我“NameError:名称'turtlenumber'未定义”
请帮帮我
turtlenumber
是serialreading()
范围内的局部变量,这意味着该变量不能被serialreading()
之外的代码访问。一旦 serialreading()
完成,turtlenumber
就会被摧毁。
要让
roomview()
访问这个值,我们可以在serialreading()
中返回它,并将返回值作为参数传递给roomview()
。
import serial
import time
import turtle
def serialreading():
serialPort = serial.Serial(
port="COM5", baudrate=9600, bytesize=8, timeout=2, stopbits=serial.STOPBITS_ONE
)
# Read data out of the buffer until a carriage return / new line is found
serialString = serialPort.readline()
turtlenumber = serialString.decode("Ascii")
print(turtlenumber)
return turtlenumber
def roomview(turtlenumber):
t = turtle.Turtle()
t.speed(0) # 1:slowest, 3:slow, 5:normal, 10:fast, 0:fastest
t.forward(turtlenumber)
time.sleep(1)
turtle.reset()
while 1 > 0:
turtlenumber = serialreading()
roomview(turtlenumber)
旁注:我不明白为什么
print(turtlenumber)
会引发异常,所以我放弃了那里的错误处理。但是,如果连接由于某种原因中断,serialPort.readline()
可能会引发错误。如果数据损坏,serialString.decode("Ascii")
也可能会引发错误。我会让你弄清楚是否值得处理这些场景。
希望有帮助。