用樹莓派學python-用gpio控制led燈的顏色用pygame顯示對應的圖片

奇奇老師,武漢大學軟件工程碩士,有著十幾年的軟件開發工程經驗。

今天我們說一說用用樹莓派學python-用gpio控制led燈的顏色用pygame顯示對應的圖片。

1. Pygame庫介紹

Pygame是跨平臺Pyth,Pygame 作者是 Pete Shinners, 協議為 GNU Lesser General Public License。


用樹莓派學python-用gpio控制led燈的顏色用pygame顯示對應的圖片


Pygame是一套用來寫遊戲的Python模塊。它是基於SDL庫的,它使你可以用Python語言創建完全界面化的遊戲和多媒體程序。Pygame可以運行在幾乎所有的平臺和操作系統上。

2.本文用pygame用來顯示圖片

pygame.image.load(filename)).convert()

screen.blit(img,imgpos)

pygame.display.update()


用樹莓派學python-用gpio控制led燈的顏色用pygame顯示對應的圖片


用樹莓派學python-用gpio控制led燈的顏色用pygame顯示對應的圖片


convert函數是將圖像數據都轉化為Surface對象,每次加載完圖像以後就應該做這件事件(事實上因為 它太常用了,如果你不寫pygame也會幫你做);convert_alpha相比convert,保留了Alpha 通道信息(可以簡單理解為透明的部分)。

blit是個重要函數,第一個參數為一個Surface對象,第二個為左上角位置。畫完以後一定記得用update更新一下,否則畫面一片漆黑。

3、gpio來控制led燈的顏色

GPIO(General Purpose I/O Ports)意思為通用輸入/輸出端口,通俗地說,就是一些引腳,可以通過它們輸出高低電平或者通過它們讀入引腳的狀態(是高電平或是低電平)。GPIO是個比較重要的概念,可以通過GPIO口和硬件進行數據交互,控制硬件工作(如LED、蜂鳴器等),讀取硬件的工作狀態信號(如開關)等。

本文用的是輸出。

GPIO.output(pins[i], GPIO.HIGH)

然後通過下面的命令來控制燈的亮滅:

p_R.ChangeDutyCycle(R_val)


用樹莓派學python-用gpio控制led燈的顏色用pygame顯示對應的圖片


用樹莓派學python-用gpio控制led燈的顏色用pygame顯示對應的圖片


4、本文要實現的是


用樹莓派學python-用gpio控制led燈的顏色用pygame顯示對應的圖片


代碼如下:

<code>import RPi.GPIO as GPIO
import pygame
import sys
import os
pins = {'pin_R':11, 'pin_G':12}
GPIO.setmode(GPIO.BOARD)
colors = [0xFF00, 0x00FF]
for i in pins:
GPIO.setup(pins[i], GPIO.OUT) # Set pins' mode is output
GPIO.output(pins[i], GPIO.HIGH) # Set pins to high(+3.3V) to off led
p_R = GPIO.PWM(pins['pin_R'], 2000) # set Frequece to 2KHz
p_G = GPIO.PWM(pins['pin_G'], 2000)
p_R.start(0) # Initial duty Cycle = 0(leds off)
p_G.start(0)
#初始化pygame
pygame.init()
#創建舞臺,利用Pygame中的display模塊,來創建窗口
screen = pygame.display.set_mode((800,600),pygame.DOUBLEBUF,0)
screen.fill([255,255,255])
font = pygame.font.SysFont("microsoftyaheiui",20)
# 生成文字
text = font.render(u"神奇鑰匙,為你打開成長之門!",1,(255,0,0))
# 取得文本區域大小 我這裡是將
textpos = text.get_rect()
textpos.y = screen.get_rect().bottom - textpos.bottom + textpos.top
#
textpos.x = screen.get_rect().right - textpos.right + textpos.left
#設置窗口標題
pygame.display.set_caption("紅燈綠燈")
filename = "greenLed.png"
#然後更新舞臺顯示
pygame.display.flip()
def setColor(col): # For example : col = 0x112233
R_val = (col & 0x1100) >> 8
G_val = (col & 0x0011) >> 0
#p_R.ChangeDutyCycle(R_val) # Change duty cycle

p_R.ChangeDutyCycle(R_val) # Change duty cycle
p_G.ChangeDutyCycle(G_val)
def loop():
global filename
while True:
screen.blit(text,textpos)
for event in pygame.event.get():
if event.type == pygame.QUIT:
destroy()
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT or event.key == ord('d'):
if(filename == "redLed.png" ):
filename = "greenLed.png"
col = colors[1]
else:
filename = "redLed.png"
col = colors[0]
setColor(col)
screen.fill([255,255,255])
img = pygame.image.load(filename)
imgpos = img.get_rect()
imgpos.centery = screen.get_rect().centery
imgpos.centerx = screen.get_rect().centerx
screen.blit(img,imgpos)
pygame.display.update()
def destroy():
p_R.stop()
p_G.stop()
for i in pins:
GPIO.output(pins[i], GPIO.HIGH) # Turn off all leds
GPIO.cleanup()
if __name__ == "__main__":
try:
loop()
except KeyboardInterrupt:
destroy()
/<code>


分享到:


相關文章: