上一节我们已经搭好了开发环境,接下来就可以写Python程序来控制小车了。首先用EV3主机、大型伺服马达和超声波传感器搭建一个小车:
可以自由发挥,我的小车完成后长这样:
下一步,我们用程序控制小车。首先根据马达和传感器接入的位置初始化如下:
motor = Motor(Port.B) # 接在B口
ultrasonic = UltrasonicSensor(Port.S4) # 接在4号口
然后,设置初始速度0表示静止:
speed = 0
通过传入1、-1和0分别表示加速、减速和停止:
def setSpeed(acc):
global speed
if acc < 0:
speed = max(0, speed - 1)
elif acc > 0:
speed = min(3, speed + 1)
else:
speed = 0
if speed > 0:
motor.run(speed * 90) # 设置每秒转N个90度
else:
motor.stop()
因为小车的初始速度为0,我们可以设定响应右键加速,左键减速,中键停止,上键停止并退出,用一个无限循环实现功能如下:
while True:
if not any(brick.buttons()): # 没有按任何按键
wait(10)
else:
if Button.LEFT in brick.buttons():
setSpeed(-1)
elif Button.RIGHT in brick.buttons():
setSpeed(1)
elif Button.CENTER in brick.buttons():
setSpeed(0)
elif Button.UP in brick.buttons():
setSpeed(0)
break
wait(500)
if ultrasonic.distance() < 200: # 检测到障碍物不足200毫米时
setSpeed(0)
因为EV3的控制API并没有提供回调,所以只能通过无限循环主动轮询。使用无限循环时需要注意,务必在每次循环内部通过wait()暂停若干毫秒,否则很容易耗尽CPU。最后,我们通过超声波传感器返回的距离判断是否自动停车。
加上声光特效后,来看看实际效果:
EV3的Python接口全部在pybricks包中,要查看完整的API,请在VS Code新建EV3工程时选择“Open user guide and examples”,即可在本地浏览器打开API文档。
参考源码