2017-05-12 151 views
1

因此,對於我在AP Comp Sci中的最終項目,我決定構建一個Pi和Arduino機器人,因爲我打算使用Pi來控制Arduino的數字輸入(Arduino就是這樣),I要創建和測試我的鍵盤控制,所以電路實驗板一些LED的GPIO寫了這樣的代碼:鍵盤控制問題

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() 

然而,當它在一次比如,當一個& s爲本來是要輸出到兩個燈按(在我的測試電路中)它只輸出到一個!此外,燈光閃爍,速度非常快,速度不慢,只要我按住鍵,我就希望它保持穩定,因爲我希望我的機器人能夠保持一致而不是緊張(就移動性而言)。我該怎麼辦?

P.S.我知道我使用了Pygame,這不是一款遊戲。我只是認爲它的關鍵跟蹤比Tkinter更容易使用,因爲我有很小的Python體驗(我真的是一個Java人)

回答

0

我想,因爲你在'KEYDOWN'事件上運行它,它會即使您認爲您同時按下了兩個按鍵中的第一個,也會立即運行。所以當你得到key.get_pressed()時,只有其中一個按鈕被按下。

嘗試去掉這兩行(並重新縮進),看看它是否效果更好:

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

它閃爍,因爲你在每一個週期調用clearGP(),所以你會亮起一個週期50%的LED並關閉另外50%的LED。只有在未按下按鍵的情況下才應關閉LED。

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

我會試試這個,讓你知道它是怎麼回事 –