我正在使用 Raspberry Pi 3B+ 根据来自键盘的输入来控制一些电机。我正在使用 pad4pi 库,并设置了一个定义来处理按键。我应该注意,我对 Python 很陌生。
我尝试在不同的位置放置返回和中断,但它们要么给出语法错误,要么像我再次按下按钮一样继续,(实际上就像没有返回一样。)
我尝试了多种方法,例如:
elif (key=="8"): #-y
print('y-')
GPIO.output(yp, False)
GPIO.output(yn, True)
time.sleep(.01)
GPIO.output(yp, False)
GPIO.output(yn, False)
return
或者:
elif(key=="6"): #+x
for t in range(5):
print('x+')
GPIO.output(xp, True)
GPIO.output(xn, False)
GPIO.output(xp, False)
GPIO.output(xn, False)
print('exit')
return
但是 return 和 break 似乎在 if 函数之后返回,第一个中的 print 行和第二个中的 for 行。
我正在使用命令行进行反馈。对于第二个例子,我期待的是:
x+
x+
x+
x+
x+
exit
但我得到的是
x+
x+
x+
x+
x+
exit
x+
x+
x+
x+
...
编辑:这是调用函数的主要代码:
#main loop
while(True):
keypad.registerKeyPressHandler(move)
这是它的定义方式:
def move(key):
if (key=="2"): #+y
print('y+')
...
之后它只是如上所示的 elifs 直到结束:
else:
return
return
这基本上就是我认为的所有相关代码。如果您需要更多,请告诉我。编辑2:这是一些重现问题的代码:
import RPi.GPIO as GPIO
from pad4pi import rpi_gpio
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
import time
from time import sleep
#y control
yp = 24;
yn = 26;
GPIO.setup(yp, GPIO.OUT) #+y
GPIO.setup(yn, GPIO.OUT) #-y
#keypad inputs
KEYPAD = [
["1","2","3","A"],
["4","5","6","B"],
["7","8","9","C"],
["*","0","#","D"]
]
COL_PINS = [31, 33, 35, 37]
ROW_PINS = [32, 36, 38, 40]
factory = rpi_gpio.KeypadFactory()
factory.create_4_by_4_keypad
keypad = factory.create_keypad(keypad=KEYPAD, row_pins=ROW_PINS, col_pins=COL_PINS)
def move(key):
if (key=="8"): #-y
print('y-')
GPIO.output(yp, False)
GPIO.output(yn, True)
time.sleep(.01)
GPIO.output(yp, False)
GPIO.output(yn, False)
return
else:
return
#main loop
while(True):
keypad.registerKeyPressHandler(move)
#cleanup:
keypad.cleanup()
GPIO.cleanup()
编辑 3:我收到的错误消息主要可以归结为我对 python 的缺乏经验。例如:
if (key=="8"): #-y
print('y-')
GPIO.output(yp, False)
GPIO.output(yn, True)
time.sleep(.01)
GPIO.output(yp, False)
GPIO.output(yn, False)
break
else:
return
给出:
> %Run recreate.py
Traceback (most recent call last):
File "/home/pi/Desktop/python/recreate.py", line 36
break
^
SyntaxError: 'break' outside loop
我尝试过的唯一没有给出该错误的位置是:
elif(key=="6"): #+x
for t in range(5):
print('x+')
GPIO.output(xp, True)
GPIO.output(xn, False)
break
GPIO.output(xp, False)
GPIO.output(xn, False)
print('exit')
return
返回:
x+
exit
x+
exit
x+
exit
x+
exit
x+
...
编辑:找到解决方法!移出
keypad.registerKeyPressHandler(move)
主循环。