一個初學者的指南,以覆盆子皮與西蒙的遊戲墊板

學習電路建設和Python編碼的基礎知識與這個初學者樹莓Pi遊戲教程。...

一個試驗板允許你建立電路,而不必焊接任何東西。這是一個偉大的工具,以電子實驗,但它可以恐嚇。有一個專案可以幫助你在學習的同時保持動力。

Simon

有幾個簡單的遊戲,使偉大的樹莓皮初學者專案。一個很容易讓你開始的遊戲是西蒙。西蒙是一個記憶遊戲,其中一系列的燈光閃爍隨機順序,玩家必須記住順序。隨著玩家的進步,序列的長度也會增加。

所需元件

要開始,您需要以下內容:

  1. 樹莓派
  2. 一張閃著Raspbian OS的microSD卡
  3. 4個不同顏色的LED
  4. 4個電阻器(220歐姆到1千歐姆)
  5. 4個按鈕
  6. 1 x試驗板
  7. 連線所有東西的跨接電纜

你可以在這個專案中使用任何樹莓圓周率,但圓周率零模型不連線到麵包板沒有一些焊接容易。無論您使用哪種型號,您都需要電源、顯示器、鍵盤和滑鼠。

如果您以前從未設定過Raspberry Pi,您可以在Raspberry Pi初學者指南中學習如何為本教程做好準備。

在本教程中,您將編寫Python程式碼,並且可以使用任何文字編輯器來編寫它,但是您可能會發現程式碼編輯器更容易。Raspberry Pi作業系統上已經安裝了幾個,Thonny是為初學者設計的。無論您使用哪一個,您都需要能夠儲存並執行您的程式碼才能遵循本教程。

試板入門

如果您以前從未使用過試驗板,您可能需要從閱讀試驗板教程開始。瞭解試驗板的工作原理將有助於您瞭解如何建立電路。

Raspberry Pi有兩行通用輸入/輸出(GPIO)引腳。這些引腳允許您連線元件到您的樹莓圓周率。一些引腳傳送資訊,其他提供電源,一些接地你的電子裝置。

GPIO Raspberry Pi

我們將開始新增一個LED燈到我們的實驗板。如果你以前從未在實驗板上使用過LED燈,你可能想讀一本教程,更深入地解釋它是如何工作的。

首先將GPIO引腳連線到主機板。哪一個管腳無關緊要,只要它是GPIO管腳而不是電源或接地管腳。上面是GPIO引腳的圖表,它將幫助您確定要使用哪個引腳。本教程使用管腳編號18,也標記為GPIO 24。

該引腳將提供一些電源的實驗板,並允許覆盆子Pi與電路板上的元件進行通訊。然後將Pi上的針腳6連線到試驗板的接地導軌上。這將使電路板接地,並允許我們建立電路。

one led connected to raspberry pi

來自樹莓的功率太高,無法直接連線LED。使用電阻器可以降低功率水平並防止LED燒壞。將電阻器的一側連線到GPIO引腳**的同一條線路上,另一端連線到試驗板的另一側。然後將LED的正極放在電阻器後面。LED的負極端可以直接連線到負極導軌上。最終結果應該如上圖所示。徹底檢查你的線路並開啟Pi。LED應該亮起。

現在,你已經用你的樹莓Pi做了一個電路,你可以用程式碼控制它。

使用python程式碼控制led

本教程將逐步介紹程式碼,但如果您想隨時引用已完成的程式碼,可以在Pastebin上找到它。

現在,電源是到LED的,但我們要控制它何時開啟和關閉。下面的Python程式碼將允許我們與董事會對話。

import RPi.GPIO as GPIOGPIO.setmode(GPIO.BOARD)GPIO.setwarnings(False)red = 18GPIO.setup(red, GPIO.OUT)GPIO.output(red, GPIO.LOW)

前幾行就把事情安排好了。將匯入Raspberry Pi GPIO庫。as GPIO只是讓我們參考RPi.GPIO檔案作為GPIO來節省一點輸入。GPIO引腳模式設定為BOARD。您不必使用此設定,但在GPIO行中按管腳順序引用管腳會更容易。

最後,我們將警告設定為false。這將停止不必要的警告。

接下來的三條線控制LED。紅色LED連線到GPIO引腳18。不用記住,變數red將儲存位置。接下來,GPIO.setup設定告訴我們的程式它正在傳送資訊到紅色的pin。最後,我們設定了GPIO.輸出把紅色的針打到低點。執行此程式時,指示燈將熄滅。要重新開啟它,請切換GPIO.低至GPIO.高,然後再次執行程式。

儲存程式碼,然後單擊run檢視它的執行情況。如果程式碼編輯器中沒有run按鈕,請儲存它並執行python我的檔名.py在終端視窗。您需要首先導航到與新Python檔案相同的目錄。如果你不確定怎麼做,請檢視樹莓皮備忘單。

新增多個led

為了建立遊戲西蒙,我們需要四個不同顏色的燈光。設定紅色LED的步驟與設定其他三個LED的步驟相同。您的接線應如下圖所示:

four leds connected to raspberry pi

您的程式碼應該如下所示:

import RPi.GPIO as GPIOGPIO.setmode(GPIO.BOARD)GPIO.setwarnings(False)red = 18yellow = 22green = 24blue = 26GPIO.setup(red, GPIO.OUT)GPIO.setup(yellow, GPIO.OUT)GPIO.setup(green, GPIO.OUT)GPIO.setup(blue, GPIO.OUT)GPIO.output(red, GPIO.HIGH)GPIO.output(yellow, GPIO.HIGH)GPIO.output(green, GPIO.HIGH)GPIO.output(blue, GPIO.HIGH)

測試完LED後,設定GPIO.輸出至GPIO.低把每一個都關掉。

儘管您使用的導線顏色無關緊要,但請嘗試使用對您有意義的顏色,以幫助您更輕鬆地閱讀電路板。例如,黑線常被用作地線。在這個電路中,您可能需要將導線的顏色與LED燈的顏色相匹配。

控制帶按鈕的LED

首先在你的電路板上新增一個按鈕。該按鈕將需要連線到地面和GPIO引腳。電路應該是這樣的:

one button on board

要使按鈕控制LED,我們需要新增到我們的程式碼。設定按鈕與設定LED類似,只是GPIO引腳設定為輸入,而不是輸出。此程式碼還設定了Pi上的內部上拉電阻器,這是使按鈕正常工作所必需的。

GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP)

現在我們需要檢查按鈕是否被按下的程式碼。

game = Truewhile game: redButtonState = GPIO.input(32) if redButtonState == 0: GPIO.output(red, GPIO.HIGH) time.sleep(1) GPIO.output(red, GPIO.LOW)

我們希望我們的程式不斷檢查按鈕是否被按下,所以我們使用while迴圈。因為迴圈永遠不會出錯,所以它會一直執行並檢查按鈕,直到我們透過按停止按鈕或使用鍵盤快捷鍵Ctrl+c手動結束程式。

接下來,為了更容易地引用按鈕GPIO pin傳送給我們的輸入,我們將該資訊儲存在變數redButtonState中。如果我們的按鈕輸入變為0,我們就知道按鈕被按下了。

如果按下按鈕,紅色LED將亮起。然後,一秒鐘後,LED將熄滅。為了計時,我們使用時間。睡眠(1) 功能。要使其工作,您需要匯入指令碼頂部的時間庫。

一個按鈕工作後,您可以再新增三個,每個LED一個。您的程式碼應該如下所示:

import random import timeimport RPi.GPIO as GPIOGPIO.setmode (GPIO.BOARD)GPIO.setwarnings(False)red = 18yellow = 22green = 24blue = 26GPIO.setup(red, GPIO.OUT)GPIO.setup(yellow, GPIO.OUT)GPIO.setup(green, GPIO.OUT)GPIO.setup(blue, GPIO.OUT)GPIO.setup(32, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(36, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(38, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(40, GPIO.IN, pull_up_down=GPIO.PUD_UP) game = True while game: redButtonState = GPIO.input(32) if redButtonState == 0: GPIO.output(red, GPIO.HIGH) time.sleep(1) GPIO.output(red, GPIO.LOW) yellowButtonState = GPIO.input(36) if yellowButtonState == 0: GPIO.output(yellow, GPIO.HIGH) time.sleep(1) GPIO.output(yellow, GPIO.LOW) greenButtonState = GPIO.input(38) if greenButtonState == 0: GPIO.output(green, GPIO.HIGH) time.sleep(1) GPIO.output(green, GPIO.LOW) blueButtonState = GPIO.input(40) if blueButtonState == 0: GPIO.output(blue, GPIO.HIGH) time.sleep(1) GPIO.output(blue, GPIO.LOW)

你的董事會應該是這樣的:

simon board complete

所有的電子裝置現在都就位了。如果您有任何問題,請檢查程式碼是否有任何錯誤。記住,如果你卡住了,你可以從Pastebin下載完整的程式碼!

建立遊戲

這個專案已經涵蓋了所有的基礎知識,你需要知道開始使用一個實驗板。但將這些技能轉化為遊戲將真正展示你的能力!

在西蒙,玩家看到一系列的燈光閃爍,必須記住模式。只需一盞燈就可以輕鬆啟動。每一個關卡都會在圖案中新增一個隨機光,使遊戲更加困難。

建立模式

這一步相當簡單。一個陣列將儲存我們的光模式。第二個陣列將儲存我們的燈光的GPIO引腳。每一個遊戲迴圈,一個新的隨機光會被新增到陣列的末端。我們使用隨機.randint()函式選擇0到3之間的數字,表示4個LED。

pattern = []lights = [red, yellow, green, blue]while game: pattern.append(random.randint(0,3))

接下來,我們要點亮燈光來顯示圖案。

while game: pattern.append(random.randint(0,3)) for x in pattern: GPIO.output(lights[x], GPIO.HIGH) time.sleep(1) GPIO.output(lights[x], GPIO.LOW) time.sleep(0.5)

在兩個燈光之間暫停是很重要的。這樣可以更容易地看到相同的燈光是否在圖案中連續使用。

獲取播放器輸入

接下來,遊戲必須等待玩家猜測燈光的順序。程式必須檢查模式中的每個燈光,並等待播放器按下按鈕。這需要巢狀迴圈:

for x in pattern: waitingForInput = True while waitingForInput: redButtonState = GPIO.input(32) yellowButtonState = GPIO.input(36) greenButtonState = GPIO.input(38) blueButtonState = GPIO.input(40) if redButtonState == 0: GPIO.output(red, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(red, GPIO.LOW) if yellowButtonState == 0: GPIO.output(yellow, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(yellow, GPIO.LOW) if greenButtonState == 0: GPIO.output(green, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(green, GPIO.LOW) if blueButtonState == 0: GPIO.output(blue, GPIO.HIGH) waitingForInput = False time.sleep(1) GPIO.output(blue, GPIO.LOW)

上面的大部分程式碼都是重用我們編寫的測試按鈕的程式碼。

相關:Python成為未來程式語言的6個原因

檢查播放器的輸入

從這裡,很容易檢查玩家是否進入了正確的模式。每次他們按下一個按鈕,遊戲就可以檢查這個按鈕是否正確。為此,請為每個按鈕輸入新增另一個if語句:

if redButtonState == 0: GPIO.output(red, GPIO.HIGH) waitingForInput = False if x != 0: game = False time.sleep(1) GPIO.output(red, GPIO.LOW)

for迴圈中的變數x具有下一個燈光的編號。紅色LED燈位於第一個位置,或數字0。如果玩家按下紅色LED按鈕時,我們有一個0在我們的模式,他們是對的!否則,他們就輸了。將變數game設定為false將停止遊戲迴圈並結束程式。

祝賀 你!你白手起家的創造了一個遊戲!

建立一個遊戲為這個專案添加了比新增LED和按鈕更多的程式碼。向你的朋友和家人展示一個最終的專案,可以幫助你保持動力。

這個遊戲相當簡單。挑戰自我,改進基本設計。如果玩家輸了,燈可能會閃爍。也許你想挑戰自己,為遊戲新增聲音。你的想象力是唯一的極限!

好吧,還有你要拿的硬體。

  • 發表於 2021-03-29 18:59
  • 閱讀 ( 55 )
  • 分類:程式設計

你可能感興趣的文章

xbox成就:初學者指南

... 你可能知道,成就並不是Xbox獨有的。PlayStation有一個幾乎相同的功能,稱為獎盃,而Steam有自己的成就係統。 ...

  • 發佈於 2021-03-11 16:39
  • 閲讀 ( 61 )

9個很棒的樹莓皮星球大戰專案創意

...絕地建造。現在是時候專注於每個人最喜歡的單板電腦:覆盆子皮。 ...

  • 發佈於 2021-03-12 02:42
  • 閲讀 ( 68 )

你需要了解的12個樹莓皮音樂專案

...房間安裝無線揚聲器,所有房間都播放相同的音樂。有了覆盆子皮,你就可以在家裡安裝了。 ...

  • 發佈於 2021-03-12 21:52
  • 閲讀 ( 51 )

9個最好的pi程式設計資源,把你的樹莓pi使用

...定一個Raspberry Pi也提供了學習基本shell命令的機會。但是覆盆子皮不僅僅是簡單的猛擊。透過大量的硬體和軟體整合,Raspberry Pi是一個令人驚歎的硬體。此外,對Pi進行程式設計可以得到有用的專案。從書籍到網站和影片,看看...

  • 發佈於 2021-03-14 03:57
  • 閲讀 ( 53 )

arduino入門:初學者指南

...(處理是最流行的軟體)。他們可以和其他的阿杜尼諾,覆盆子,野豆蔻,或者幾乎任何其他的東西交談。確保您閱讀了我們對$5微控制器的比較,以便對這些微控制器之間的差異進行徹底比較。 ...

  • 發佈於 2021-03-14 15:19
  • 閲讀 ( 55 )

解放玻利維亞鬼偵察荒地與這7個初學者提示

...索玻利維亞的時候,在荒原上有很多事情要做,但你不必一個人去做。這裡有一些使你的任務成功的基本技巧。 ...

  • 發佈於 2021-03-15 10:14
  • 閲讀 ( 33 )

所以你想製作iphone應用程式?10個初學者專案

...應用程式,你可以學習幾種不同的程式語言。但其中只有一個是專門為iOS建立的:Swift。蘋果從一開始就為**macOS、iOS、watchOS和tvOS應用構建了這種語言。它包含了許多特性,這些特性使它非常適合初學者。 ...

  • 發佈於 2021-03-16 13:41
  • 閲讀 ( 53 )

為你生活中的arduino tinkerer準備的10個禮物

...修補匠買什麼作為他們的生日或節日禮物嗎?無論他們是一個初出茅廬的年輕發明家還是一個終生的硬體駭客,Arduino板和配件都是完美的禮物。 ...

  • 發佈於 2021-03-19 01:59
  • 閲讀 ( 60 )

適合初學者的11個最佳樹莓圓周率專案

... 覆盆子皮上少了幾個東西之一就是一個按鈕。你基本上是把它插上電源,啟動作業系統,然後開始使用電腦。 ...

  • 發佈於 2021-03-19 13:42
  • 閲讀 ( 60 )

為初學者提供的7個最佳線上烹飪指南

就像任何其他技能一樣,你需要學習的關於如何成為一個偉大的廚師的一切都可以在網上找到。最好的開始是快速簡單的食譜,不會讓你不知所措,也不會讓你再踏進廚房。 ...

  • 發佈於 2021-03-21 09:24
  • 閲讀 ( 50 )