步驟1:所需的材料
所需的材料如下:
-1 Arduino
-1小面包板
- 1個您不介意拆除的舊SNES控制器
-10-15跳線(我使用11個)
-5個LEDs
-膠帶
第2步:連接Arduino的所有電線
將跳線插入arduino的2-9針中。參見下文,了解每個引腳的功能以及我推薦的配色方案。
引腳2:頻閃引腳。從控制器連接到橙色導線,所以我將跳線設置為粉紅色或橙色。
引腳3:時鐘引腳。從控制器連接到黃色電線,所以我建議使用黃色跳線。
引腳4:數據引腳。控制器上有紅色導線,所以最好使用紅色跳線。
引腳5:頂部LED的電源。引腳6:右側LED的電源。引腳7:底部LED的電源。
Pin 8:左側LED的電源。引腳5-8的跳線顏色應相同。我選擇“深綠色”。
Pin 9:指示燈電源。我使用了淺綠色。
5V:電源引腳,連接到控制器的白線,所以我用了白色的跳線。
GND:控制器的棕線,我用了黑色的跳線。
GND:用于將面包板的所有接地線重新連接到arduino,所有接地線都使用藍色。
步驟3:設置LED和面包板
將您的LED以菱形放置在面包板上。確保沒有2個LED引腳共享相同編號的行。將所有陰極(LED上的短引腳)連接到面包板上的接地線,然后將接地線連接到arduino的GND之一。將針腳5-8上的跳線連接到LED的陽極,與它們的位置相對應,如上一步中所述。
對于游戲指示器LED,只需將其與其他LED放開,將其陽極連接到Pin 9,其陰極連接到接地軌。
步驟4:連接控制器
到現在為止,您完全不必弄亂控制器。現在,您必須從電線末端切下塑料外殼,以便可以進入電線內部。它們上應該有一些金屬小端(請參閱圖片),因此,將跨接導線鉤起來應該相當簡單,對嗎?
錯。
首先將控制器線由arduino綁在桌子上。如果任其發展,就很難建立良好的聯系。我的跳線直接從小金屬物品中滑出,所以我拿了一把小刀,將兩端撬開(見圖),這樣我就可以將跳線垂直地插入插座中。將5根線連接到控制器時,請確保它們彼此之間不接觸,并且確保正確匹配顏色。
步驟5:
在這一點上,您應該已正確連接好一切并準備就緒。下載鏈接的Arduino草圖,對其進行編譯,然后將其上傳到您的arduino。要播放,請等待游戲指示燈LED停止閃爍,然后將AXBY用作4個基本方向。在接下來的兩個步驟中,我將嘗試解釋代碼,但是如果您想要的只是一個運行中的游戲,則可以在此處停止。
Simon_Says_snes.ino
步驟6:代碼,第1部分
首先介紹了控制器如何發送數據的一些背景知識。為了從控制器接收數據,您將選通引腳設置為高電平,然后讀取數據的第一位(最低有效位)。要獲得第二位,請切換時鐘引腳,然后從數據引腳讀取。您將繼續執行16次。控制器的狀態是一個2字節數字,其中12個最低有效字節包含當前被按下的按鈕,而4個最高有效字節則無用。
所以前7行非常簡單,因為它們只是分配名稱
第8-20行聲明用于檢測按下控制器上哪個按鈕的十六進制數據。每個十六進制值都會在數據流中打開一個單獨的位,因此您可以使用移位來確定是否按下了某個按鈕,或者僅使用按位和。
變量“數組”只是一個數組長度為30 ints的整數。這將存儲游戲的按順序。‘pos’是位置變量。
接下來的是setup()方法。我們從播種隨機數生成器開始,然后為每個引腳2-9設置引腳模式。接下來,我們出于調試目的打開串行通信,并將按鈕順序設置為全“ 4”。我這樣做是因為b/c的LED編號系統最多只能增加3個,因此4個基本上只是一個占位符。現在我們將timeForPress設置為1000,并調用genSequence()方法,該方法將數組填充為0到3(含3)之間的隨機整數。接下來,將我們的位置設置為0,以表明它尚未開始游戲,然后閃爍游戲指示器以表明游戲即將開始。
步驟7:代碼,第2部分
在這一步中,我將快速介紹用于從控制器獲取數據的方法。我在上一步中告訴了您理論知識,但是現在我將列出實際的函數調用。
我認為我從這個可指導的代碼中獲得了一些代碼。但是,還不能完全確定。
有三種方法可用于檢查控制器輸入:
buttons()
頻閃()
shiftin()
buttons()方法首先設置了返回值變量和一個位置計數器。然后,它選通(使用strobe()),并進入for()循環。在for循環中,它使用shiftin()方法和按位運算符一次讀取并存儲一位數據。
strobe()方法非常簡單。基本上只是將選通引腳設置為高電平,然后立即返回至低電平。很簡單的東西。這告訴控制器開始傳輸數據。
shiftin()方法實際上讀取數據。它從數據引腳獲取數據,然后切換時鐘引腳,告訴控制器發送下一位。
僅使用這三種方法,您就可以讀取控制器的狀態。您永遠不必直接調用strobe()或shiftin()。最后一點,當檢查按鈕是否被按下時,必須使用2個按位運算符。 ?(波浪號)不是按位的,而是反轉數據,然后&檢查狀態與您要按下的按鈕的關系。
步驟8:代碼,第3部分
這是關于代碼的最后一步。我只是要快速了解游戲循環的操作,因為對于新手程序員來說,這應該很容易理解。
loop()方法通過串行打印控制器的狀態開始。然后,它播放存儲在數組中的序列,然后使用readAndCheckInput方法檢查用戶輸入,該方法本質上只是一個帶有一些if語句的for循環。如果您弄錯了,它就會跳出循環并執行閃爍的操作,然后結束。
-
控制器
+關注
關注
112文章
16396瀏覽量
178486 -
Arduino
+關注
關注
188文章
6471瀏覽量
187309
發布評論請先 登錄
相關推薦
評論