2014-06-22 2 views
6

지금은 코드의 파이썬 코드이 .as를 사용하여 원격 장난감 자동차를 제어하고는파이썬 키를 눌러 및 키 릴리스 리스너

def getkey(): 
     fd = sys.stdin.fileno() 
     old = termios.tcgetattr(fd) 
     new = termios.tcgetattr(fd) 
     new[3] = new[3] & ~TERMIOS.ICANON & ~TERMIOS.ECHO 
     new[6][TERMIOS.VMIN] = 1 
     new[6][TERMIOS.VTIME] = 0 
     termios.tcsetattr(fd, TERMIOS.TCSANOW, new) 
     c = None 
     try: 
       c = os.read(fd, 1) 
     finally: 
       termios.tcsetattr(fd, TERMIOS.TCSAFLUSH, old) 
     return c 

def car(): 
    while True: 
     key = getkey() 
     if key == 's': #Down arrow 
      print "Down" 
      Backward() 
     elif key == 'w': #Up arrow 
      print "Up" 
      forward() 
     elif key == 'a': 
      print "left" 
      Left() 
     elif key == 'd': 
      print "Right" 
      Right() 
     elif key == 'q': #Quit 
      print "That's It" 
      break 
def forward(): 
    GPIO.output(11,True) #Move forward 

다음과 같다 차가 앞으로 나아가지만 나는 프로그램을 종료하거나 GPIO.output (11, Flase)을 다른 방법으로 호출 할 때까지 멈추지 않을 것입니다.

특정 키의 키 릴리스를 감지하는 키 수신기가 있습니까?

는 예를 들어, 'w'경우는이 방법이라고 눌렀다 전화 다른 방법

도우 코드 경우

if w_isPressed() 
    forward() 
else if w_isReleased() 
    stop() 
+1

실제 키보드 액세스 없이는이 작업을 수행 할 수 없습니다. 터미널은 키 누름 만 전송하므로 키가 해제 된 시점을 알 수 없습니다. – Blender

+1

당신은 PyGame을 사용하여 그것을 할 수있을 것입니다. – kindall

답변

1

나는 성공적으로 전에 유사한 시나리오에서 사용되는 Pygame 게임 개발 라이브러리를 보았다 장난감의 예가 아닌 실제 시스템과 기계를 생산 현장에서 처리합니다. 나는 또한 여기에 적합한 후보라고 생각한다. 키보드 입력으로 수행 할 수있는 작업에 대해서는 pygame.key 모듈을 확인하십시오.

간단히 말해서 게임 개발에 익숙하지 않은 경우 기본적으로 '무한'게임 루프에서 입력 상태 변경과 같은 이벤트를 지속적으로 폴링하고 그에 따라 반응합니다. 일반적으로 경과 된 시간 당 델타를 사용하여 시스템의 매개 변수를 업데이트합니다. 그 주위에는 파이 게임이 있고 Pygame docs이라는 튜토리얼이 많이 있습니다.

그것에 대해 이동하는 방법에 대한 간단한 예 :

import pygame 

pygame.init() 

# to spam the pygame.KEYDOWN event every 100ms while key being pressed 
pygame.key.set_repeat(100, 100) 

while 1: 
    for event in pygame.event.get(): 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_w: 
       print 'go forward' 
      if event.key == pygame.K_s: 
       print 'go backward' 
     if event.type == pygame.KEYUP: 
      print 'stop' 

당신은 당신의 차의 움직임이 구현 된 방법에 따라 pygame.KEYDOWN, pygame.KEYUPpygame.key.set_repeat 함께 플레이해야합니다.

+0

파이 게임에 한 가지 제한 사항은 디스플레이가 connectecd가되어야한다는 것입니다. 즉, SSH를 사용하는 헤드리스 라즈베리 파이에 연결하는 경우이 방법이 작동하지 않습니다. – malte