我正在尝试制造一种具有线传感器和超声波传感器的自动驾驶汽车。如果激活了左侧和右侧的线传感器,则汽车必须向前行驶
0
上面的代码工作正常。我已经完成了将线条传感器和超声波传感器集成在一起的代码。完成的代码如下:
if pin16.read_digital == 1 & pin 15.read_digital == 1
pin2.write_anlog(180)
这很好用,但是当我尝试将左右放进去时,它不起作用。我该如何解决 ?左右的代码在
下from microbit import *
from neopixel import NeoPixel
import time
import machine
def setup():
display.off()
np = NeoPixel(pin0, 5)
np.clear()
pin4.set_pull(pin4.PULL_UP)
pin1.set_analog_period(20)
pin2.set_analog_period(20)
pin15.set_pull(pin15.PULL_UP)
pin16.set_pull(pin16.PULL_UP)
def distance():
pin3.write_digital(0)
time.sleep_us(2)
pin3.write_digital(1)
time.sleep_us(10)
pin3.write_digital(0)
output = machine.time_pulse_us(pin4, 1)
return output * 0.034 / 2
def forward():
pin2.write_analog(1)
def backward():
pin2.write_analog(180)
def stop():
pin2.write_analog(90)
def line():
if pin15.read_digital() == 1 & pin16.read_digital() == 1:
return True
else:
return False
setup()
# pin1.write_analog(90)
sleep(200)
# pin1.write_analog(70) right
# pin1.write_analog(150) right
while True:
if (distance() > 5) & line():
forward()
else:
stop()
答案 0 :(得分:0)
您应该使用and
而不是&
。 &
是按位和,绑定比==
强,而and
是逻辑和,绑定比{{1 }}。
==
与您的>>> a, b = 0, 1
>>> a == 0 and b == 1
True
>>> a == 0 & b == 1
False
语句相对应的后一个示例被解析为if
,即a == (0 & 1) == 1
(通过Python比较链,这不是 0 == 0 == 1
,其计算结果为(0 == 0) == 1
,但True
)。
对于(0 == 0) and (0 == 1)
,这不是问题,但是在所有其他情况下,它的行为都会异常。
a == 1 & b == 1
答案 1 :(得分:0)
我既不是Arduino的专家,也不是Neopixel库的专家。但是,难道您在第三段代码中不遗漏了向前的情况吗?另外,最好使用and
而不是&
,因为&
是按位运算符,并且在运算符优先级规则中的排名高于==,如tobias_k所说(您可以使用括号)如果需要,可以解决此问题,但是为什么要选择按位运算符呢?)。顺便说一句,不需要==运算符。如果整数为0,则在if语句中自动将其评估为False,否则将为True:
while True:
read_left, read_right = pin15.read_digital(), pin16.read_digital()
if read_left and read_right:
# your code to go forward
elif read_left and not read_right:
# your code to turn left
elif not read_left and read_right:
# your code to turn right
else:
# your code when no line is detected, if you want to handle this case