티스토리 뷰
2.23. 라즈베리파이 키보드로 제어되는 로봇
위 / 아래 / 왼쪽 / 오른쪽 키를 사용하여 로봇을 제어하십시오.
import curses from gpiozero import Robot robot = Robot(left=(4, 14), right=(17, 18)) actions = { curses.KEY_UP: robot.forward, curses.KEY_DOWN: robot.backward, curses.KEY_LEFT: robot.left, curses.KEY_RIGHT: robot.right, } 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 DOWN 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 UP robot.stop() curses.wrapper(main)
이 방법은 표준 curses 모듈을 사용합니다. 이 모듈은 제대로 작동하기 위해서 파이썬이 터미널에서 실행되어야하므로 IDLE과 같은 환경에서는이 방법이 작동하지 않습니다.
IDLE 상태에서 작동하는 버전을 선호하는 경우, 다음과 같은 방법으로 충분합니다.
from gpiozero import Robot from evdev import InputDevice, list_devices, ecodes robot = Robot(left=(4, 14), right=(17, 18)) # Get the list of available input devices devices = [InputDevice(device) for device in list_devices()] # Filter out everything that's not a keyboard. Keyboards are defined as any # device which has keys, and which specifically has keys 1..31 (roughly Esc, # the numeric keys, the first row of QWERTY plus a few more) and which does # *not* have key 0 (reserved) must_have = {i for i in range(1, 32)} must_not_have = {0} devices = [ dev for dev in devices for keys in (set(dev.capabilities().get(ecodes.EV_KEY, [])),) if must_have.issubset(keys) and must_not_have.isdisjoint(keys) ] # Pick the first keyboard keyboard = devices[0] keypress_actions = { ecodes.KEY_UP: robot.forward, ecodes.KEY_DOWN: robot.backward, ecodes.KEY_LEFT: robot.left, ecodes.KEY_RIGHT: robot.right, } for event in keyboard.read_loop(): if event.type == ecodes.EV_KEY and event.code in keypress_actions: if event.value == 1: # key down keypress_actions[event.code]() if event.value == 0: # key up robot.stop()
이 방법은 타사 evdev 모듈을 사용합니다. sudo pip3 install evdev로이 라이브러리를 먼저 설치하십시오. evdev는 로컬 입력 장치에서만 작동합니다. 이 방법은 SSH를 통해 작동하지 않습니다.
'프로그래밍 > 라즈베리파이 & Qt' 카테고리의 다른 글
2.25. 라즈베리파이 전위차계 (0) | 2018.08.23 |
---|---|
2.24. 라즈베리파이 모션 센서 로봇 (0) | 2018.08.23 |
2.22. 라즈베리파이 버튼 제어 로봇 (0) | 2018.08.23 |
2.21.라즈베리파이 로봇 (0) | 2018.08.23 |
2.20. 라즈베리파이 모터 (0) | 2018.08.23 |
댓글