我正在尝试通过无线和 webiopi 控制我的 Raspberry Pi 汽车。基本功能工作正常 - 有我单击 fwd 的界面,汽车将前进,当我释放按钮时,它会停止。
我现在想集成超声波距离传感器,这样当我向前行驶时,当前面有东西时,汽车应该停下来。我让它去哪里,当我点击前进按钮时,当有东西在范围内时,汽车会行驶并停止,但它只会在有东西在范围内时停止,而不是当我释放按钮时。我的 while 循环以某种方式循环(卡住)并且没有从 webiopi 读取释放按钮功能。
有人可以帮忙吗 - 已经做了好几天了,不知道我哪里出错了:-(
这是我的python脚本中的循环:
def go_forward(arg):
global motor_stop, motor_forward, motor_backward, get_range
print "Testing"
print mousefwd()
while (arg) == "fwd":
print (arg)
direction = (arg)
dist = get_range()
print "Distance %.1f " % get_range()
if direction == "fwd" and get_range() < 30:
motor_stop()
return
else:
motor_forward()
这是我的 webiopi 函数调用的代码:
function go_forward() {
var args = "fwd"
webiopi().callMacro("go_forward", args);
}
function stop1() {
var args = "stop"
webiopi().callMacro("go_forward", args);
webiopi().callMacro("stop");
}
这就是我现在拥有它但仍然无法工作的方式(我是一个完全的菜鸟:-)):
def go_forward(arg):
global motor_stop, motor_forward, motor_backward, get_range
print "Testing"
direction = arg
while direction == "fwd":
print arg
dist = get_range()
print "Distance %.1f " % get_range()
if get_range() < 30:
motor_stop()
elif direction == "fwd":
motor_forward()
else:
motor_stop()
也许向前迈出了一小步。看到 webipi 使用自己的“循环”,我添加了循环代码来检查电机 GPIO 的状态和距离以及电机是否正在运行以及距离是否太短然后停止。当我按下前进按钮时汽车现在移动,当我释放它时停止,当前进并且距离小于 30 厘米时它会停止。唯一的问题是当距离太短并且我多次按下前进按钮太快时,我现在得到一个“GPIO.output(Echo,1) _webiopi.GPIO.InvalidDirectionException: The GPIO channel is not an OUTPUT”错误: -( .
代码现在看起来像这样:
def go_forward(direction):
motor_forward()
def loop():
if get_range() < 30 and GPIO.digitalRead(M1) == GPIO.HIGH:
stop()
print "stop"
sleep(1)