控制 Raspberry Pi 辆汽车

Controlling a Raspberry Pi car

我正在尝试用键盘控制我的 raspi 汽车。我设法做到了,但我偶然发现了一个错误,我不知道如何解决它。

这是我的代码:

我还在我的车上装了一个超声波传感器:

我想在这里做的是当点击其中一个键盘时,首先调用 check() 函数来检查距离是否合适,然后它向前移动,向后移动等等..

但是按住键盘时的问题是: 例如,如果我按住键盘的向上箭头,程序会按预期调用 check() 来检查距离,如果距离合适则向前移动。当我接近一个目标物体时,汽车并没有停下并撞上了目标。所以很明显,当按住向上箭头时,我将被困在 forward() 函数中,而不会每次都调用 check() 。我该如何解决这个问题?

嗯,这里的问题是,即使 check 决定你应该停止,你还是继续做这个动作。 check需要做一次检查,returnTrue或False告诉调用者是否继续。例如:

def check():
    if distance_Ultrasonic() <= 3:
        stop()
        return False
    return True

while True:
    check()
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_RIGHT:
                check():
                turn_right()
            elif event.key == pygame.K_LEFT:
                check()
                turn_left()
            elif event.key == pygame.K_UP:
                if check():
                    forward()
            elif event.key == pygame.K_DOWN:
                if check():
                    reverse()
            elif event.key == pygame.K_q:
                stop()
                pygame.quit()
        elif event.type ==  pygame.KEYUP:
            print('No key pressed')
            stop()

这假设“turn_right”和“turn_left”实际上没有任何向前运动,所以如果你按住“右”,你只是想让它永远旋转。我不知道你想如何处理反向。如果传感器向前看,那么你就无法知道什么时候停止。