2017-02-08 13 views
0

간단한 프로그램을 만들려고하는데, 'w'를 올리면 forward()을 사용하지만 앞으로 나가면 stop()을 사용하여 모터를 멈 춥니 다. 현재는 'w'를 누르면 계속 진행하고 다른 키를 누르면 멈출 수 있습니다. 다음은 내 코드키를 누른 상태에서 파이썬 기능을 실행하는 방법은 무엇입니까?

#!/usr/bin/env python3 
# so that script can be run from Brickman 

import termios, tty, sys, time 
from ev3dev.ev3 import * 

# attach large motors to ports B and C, medium motor to port A 
motor_left = LargeMotor('outA') 
motor_right = LargeMotor('outD') 
motor_a = MediumMotor('outC') 

#============================================== 

def getch(): 
    fd = sys.stdin.fileno() 
    old_settings = termios.tcgetattr(fd) 
    tty.setcbreak(fd) 
    ch = sys.stdin.read(1) 
    termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) 

    return ch 

#============================================== 

def fire(): 
    motor_a.run_timed(time_sp=3000, speed_sp=600) 

#============================================== 

def forward(): 
    motor_left.run_forever(speed_sp=1050) 
    motor_right.run_forever(speed_sp=1050) 

#============================================== 

def back(): 
    motor_left.run_forever(speed_sp=-1050) 
    motor_right.run_forever(speed_sp=-1050) 

#============================================== 

def left(): 
    motor_left.run_forever(speed_sp=-1050) 
    motor_right.run_forever(speed_sp=1050) 

#============================================== 

def right(): 
    motor_left.run_forever(speed_sp=1050) 
    motor_right.run_forever(speed_sp=-1050) 

#============================================== 

def stop(): 
    motor_left.run_forever(speed_sp=0) 
    motor_right.run_forever(speed_sp=0) 

#============================================== 

print("ready") 
    k = getch() 
    print(k) 
    if k == 'w': 
     forward() 
    if k == 's': 
     back() 
    if k == 'a': 
     left() 
    if k == 'd': 
     right() 
    if k == 'f': 
     fire() 
    if k == ' ': 
     stop() 
    if k == 'q': 
     stop() 
     exit() 

그렇게 중지하는 방법에 어떤 생각() 'W'밀리지 않은 경우 실행입니까?

답변

0

pygame의 KEYUP 및 KEYDOWN 기능을 사용할 수 있습니다. 다음은 pygame을 사용하는 코드 스 니펫입니다.

import pygame 
pygame.init() 
screen = pygame.display.set_mode((640, 480)) 
clock = pygame.time.Clock() 
finished = False 
isKeyPressed = False 
while not finished: 
    for event in pygame.event.get(): 
     if isKeyPressed: 
      print "Key is currently pressed...Move forward!" 
     if event.type == pygame.QUIT: 
      finished = True 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_w: 
       isKeyPressed = True 
     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_w: 
       isKeyPressed = False 
       #Perform action (here) when 'w' is unpressed 
     pygame.display.flip() 
     clock.tick(60) 
pygame.quit()