2017-05-12 4 views
1

AP Comp Sci의 최종 프로젝트에서 Pi를 사용하여 Arduino 로봇을 제작하기로 결정했습니다. Pi를 사용하여 Arduino를 디지털 입력 (Arduino의 것)으로 제어 할 것이므로 I 만들어 내 키패드 제어를 테스트하고 싶었다, 그래서 GPIO 일부 LED를 breadboarded이 코드를 썼다 그러나키패드 제어 문제

import pygame 
import RPi.GPIO as GPIO 
pygame.init() 
GPIO.setmode(GPIO.BOARD) 
GPIO.setup(32,GPIO.OUT) 
GPIO.setup(36,GPIO.OUT) 
GPIO.setup(40,GPIO.OUT) 

window = pygame.display.set_mode((800,600)) 

pygame.display.set_caption("Console") 

def clearGP(): 
     x=32 
     while x<=40 : 
      GPIO.output(x,False) 
      x= x+4 

run = True 



while run : 
    for event in pygame.event.get(): 
     if (event.type==pygame.KEYDOWN): 
       keys = pygame.key.get_pressed() 
       if keys[pygame.K_s] and keys[pygame.K_a]: 
         GPIO.output(40,True) 
         GPIO.output(32,True) 

       elif keys[pygame.K_s] and keys[pygame.K_d]: 
         GPIO.output(40,True) 
         GPIO.output(36,True) 

       elif keys[pygame.K_w]: 
        GPIO.output(32,True) 
        GPIO.output(36,True) 

       elif keys[pygame.K_s]: 
        GPIO.output(40,True) 

       elif keys[pygame.K_d]: 
        GPIO.output(36,True) 

       elif keys[pygame.K_a]: 
        GPIO.output(32,True) 

       elif keys[pygame.K_t]: 
        run=False 

       clearGP() 


GPIO.cleanup() 
pygame.quit() 

, 그것이 &의는 예를 들어 한 번 두 조명에 출력되어 있었다 (내 테스트 회로에서)을 눌렀을 때 하나만 출력됩니다! 또한 라이트가 깜박이고 느리고 빠르게 깜박이며 키를 누르고 있으면 움직일 때까지 견고하게 머물러야합니다. 내 봇이 (이동성과 관련하여) 불안감이 없기를 원합니다. 나는 무엇을해야합니까?

P. 나는 파이 게임을 사용했다는 것을 알고 있습니다. 이것은 게임이 아닙니다. 나는 단지 파이썬 경험이 거의 없기 때문에 Tkinter보다 키 추적을 사용하는 것이 더 쉽다고 생각했다. (나는 정말로 자바 사람이다.)

답변

0

나는 'KEYDOWN'이벤트에서 이것을 실행하기 때문에, 동시에 두 개의 키를 눌렀을 때 첫 번째 두 개의 키를 감지하자 마자 실행됩니다. 따라서 key.get_pressed()를 얻을 때까지 버튼 중 하나만 누르면됩니다. 작동하는지

이 라인을 모두 제거하십시오 (다시 들여 쓰기) 및 참조 더 나은 :

for event in pygame.event.get(): if (event.type==pygame.KEYDOWN):

당신은 모든주기에 clearGP()를 호출하고 있기 때문에 당신이 켜집니다 그래서, 깜박이는 것 한주기의 50 %는 LED이고 나머지 50 %는 꺼야합니다. 키를 누르지 않은 경우에만 LED를 꺼야합니다.

if keys[pygame.K_a]: 
       GPIO.output(32,True) 
else: 
       GPIO.output(32,False) 
+0

나는 이것을 시도하고 그것이 어떻게되는지 알려 줄 것이다. –