我正在尝试通过无线和 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)