Python 仅当按下键盘键时,向前或向后移动4个电机

Python 仅当按下键盘键时,向前或向后移动4个电机,python,raspberry-pi,Python,Raspberry Pi,我正在尝试创建一个带有4个直流电机的机器人汽车,我正在尝试用SSH从PC控制它,我找不到任何方法,我只能在按下键盘上的按钮时才能让机器人向前移动 这是我创建的代码,没有那么复杂,但根据我发现的,这是我创建的,现在,汽车向前,向后,向左和向右,但当我按“a”向左旋转时,它旋转得非常快,我只想在按下该键时旋转,当按下该键时停止并对每个方向执行此操作 我尝试导入键盘,当我在终端运行程序时,它告诉我“没有名为键盘的模块” 如果有人能帮我我会很感激的 将RPi.GPIO导入为GPIO 进口诅咒 输入键盘

我正在尝试创建一个带有4个直流电机的机器人汽车,我正在尝试用SSH从PC控制它,我找不到任何方法,我只能在按下键盘上的按钮时才能让机器人向前移动

这是我创建的代码,没有那么复杂,但根据我发现的,这是我创建的,现在,汽车向前,向后,向左和向右,但当我按“a”向左旋转时,它旋转得非常快,我只想在按下该键时旋转,当按下该键时停止并对每个方向执行此操作

我尝试导入键盘,当我在终端运行程序时,它告诉我“没有名为键盘的模块” 如果有人能帮我我会很感激的

将RPi.GPIO导入为GPIO
进口诅咒
输入键盘
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.OUT)
GPIO.setup(13,GPIO.OUT)
GPIO.setup(15,GPIO.OUT)
GPIO.setup(16,GPIO.OUT)
GPIO.setup(31,GPIO.OUT)
GPIO.setup(33,GPIO.OUT)
GPIO.setup(35,GPIO.OUT)
GPIO.setup(37,GPIO.OUT)
screen=curses.initscr()
诅咒
诅咒
屏幕。键盘(正确)
尝试:
尽管如此:
char=screen.getch()
如果char==ord('q'):
打破
如果按下键盘('w'):#向前移动所有4个电机(11,15,31,35)
GPIO.output(11,真)
GPIO.output(13,False)
GPIO.output(15,真)
GPIO.output(16,False)
GPIO.output(31,真)
GPIO.output(33,False)
GPIO.输出(35,真)
GPIO.output(37,False)
打破
elif char==ord('s'):#将所有4个电机(13,16,33,37)向后移动
GPIO.output(11,False)
GPIO.output(13,真)
GPIO.output(15,False)
GPIO.output(16,真)
GPIO.output(31,False)
GPIO.output(33,真)
GPIO.output(35,False)
GPIO.输出(37,真)
elif char==ord('a'):#向左移动(两个电机向前移动,两个电机向后移动)
GPIO.output(11,False)
GPIO.output(13,真)
GPIO.output(15,真)
GPIO.output(16,False)
GPIO.output(31,真)
GPIO.output(33,False)
GPIO.output(35,False)
GPIO.输出(37,真)
elif char==ord('d'):#从左向右移动
GPIO.output(11,真)
GPIO.output(13,False)
GPIO.output(15,False)
GPIO.output(16,真)
GPIO.output(31,False)
GPIO.output(33,真)
GPIO.输出(35,真)
GPIO.output(37,False)
elif char==10:#停止所有电机
GPIO.output(11,False)
GPIO.output(11,False)
GPIO.output(15,False)
GPIO.output(15,False)
GPIO.output(31,False)
GPIO.output(31,False)
GPIO.output(35,False)
GPIO.output(35,False)
最后:
诅咒;屏幕。键盘(0);诅咒
诅咒
GPIO.cleanup()

这不是对您的问题的回答,而是建议您避免在整个代码中执行许多复制粘贴操作。它还有助于提高可读性

现在希望我们能够更容易地确定错误的来源

import RPi.GPIO as GPIO
import curses
import keyboard
OUTPUTS = (11, 13, 15, 16, 31, 33, 35, 37) # Define the outputs you'll use as a "constant".

GPIO.setmode(GPIO.BOARD)
for output in OUTPUTS:
    GPIO.setup(output, GPIO.OUT) # A for loop replaces 8 copy-pasted lines.

def set_outputs_states(byte_string):
    for n, char in enumerate(byte_string): # Read e.g. "00001111" character by character.
        output = OUTPUTS[n]                # n-th character is linked to the n-th output.
        state = bool(char)                 # Change "0" or "1" into False or True.
        GPIO.output(output, state)         # Turn the selected output on or off.

screen = curses.initscr()
curses.noecho()
curses.cbreak()
screen.keypad(True)

try:
    while True:
        char = screen.getch()

        if char == ord('q'):
            break

        if keyboard.is_pressed('w'): #move forward all 4 motors(11,15,31,35)
            set_outputs_states("10101010") # Functions help reducing the size of your code.
            break

        elif char == ord('s') : #move backword all 4 motors(13,16,33,37)
            set_outputs_states("01010101")

        elif char == ord('a'): #move left(2 motors forward and 2 backward)
            set_outputs_states("01101001")

        elif char == ord('d'): # oposite from left to go right
            set_outputs_states("10010110")

        elif char == 10: # stop all the motors
            set_outputs_states("00000000")

finally:
    curses.nocbreak()
    screen.keypad(0)
    curses.echo()
    curses.endwin()
    GPIO.cleanup()

请将代码放在此处的文本条目中,而不是作为图像。是否确实已在运行脚本的系统上安装了
键盘
?也许你需要运行
pip安装键盘
?是的,它已经安装好了,我也以root用户身份运行了它,但不起作用。。。。当我按下“w”键时,它会显示一些关于键盘的信息,并在最后告诉我:“AttributeError:‘NoneType’对象没有属性‘group’”。你能将完整的回溯添加到你的帖子中吗?还有当你按下“w”时,键盘上出现的信息,在“w”部分的末尾有一个
break
,它将跳出循环,让你的代码跳转到
finally
子句。这是有意的吗?