python - 使用箭头控制步进电机
问题描述
我在树莓派上做一个程序,我可以使用键盘箭头控制电机。为此,我使用 GPIO Zero 模块作为键盘控制机器人的示例。我设法根据需要更新了代码,但是当我按下按键时,什么也没有发生。
有人可以帮我解决这个问题吗?先感谢您
为了控制步进电机,我使用了 Adafruit 模块。
import curses
import time
from gpiozero import Robot
from adafruit_servokit import ServoKit
kit = ServoKit(channels=8)
def cameraDown():
kit.servo[0].angle = 0
time.sleep(0.01)
def cameraUp():
kit.servo[0].angle = 180
time.sleep(0.01)
def cameraFront():
kit.servo[0].angle = 90
time.sleep(0.01)
def cameraFace():
kit.servo[0].angle = 70
time.sleep(0.01)
actions = {
curses.KEY_UP: cameraDown(),
curses.KEY_DOWN: cameraUp(),
curses.KEY_LEFT: cameraFront(),
curses.KEY_RIGHT: cameraFace(),
}
def main(window):
next_key = None
while True:
curses.halfdelay(1)
if next_key is None:
key = window.getch()
else:
key = next_key
next_key = None
if key != -1:
# KEY PRESSED
curses.halfdelay(3)
action = actions.get(key)
if action is not None:
action()
next_key = key
while next_key == key:
next_key = window.getch()
# KEY RELEASED
cameraFace()
curses.wrapper(main)
解决方案
问题出在您的actions
dict 中,您在其中为每个键提供由其中一个函数返回的值。您在这里要做的就是赋予它功能本身。只需去掉括号:
actions = {
curses.KEY_UP: cameraDown,
curses.KEY_DOWN: cameraUp,
curses.KEY_LEFT: cameraFront,
curses.KEY_RIGHT: cameraFace
}
推荐阅读
- c# - 如何从 PipeStream 中获取所有可用字符并立即返回?
- browser - 将鼠标悬停在锚链接上时,什么可能导致浏览器状态栏不显示?
- terraform - 如何将使用 cidrsubnets 的子网的 CIDR 范围传递到 Terraform 版本 0.14 中的 VPC 模块
- python - 如何从其他几个字典制作复合字典
- c++ - 自定义排序向量 2d c++17 发送到后面
- angular - 作为胖箭头方法的已定义提供程序可以调用另一个提供的胖箭头方法吗?
- flutter - 由滑块控制的照片褪色会产生错误
- tensorflow - 使用 Tensorflow 内置数据集库在 CoLab 中访问 CheXpert 数据集
- python-3.x - 基于函数的视图为表单返回多个值 kwargs
- c# - 如何使用 AES 加密文本文件以外的文件?PDF、Word 等