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

基于stm32和mpu9250的usb hid鍵盤、鼠標(biāo)、游戲控制器



Y1620工程機械主機控制器 車載智能控制器 CAN總線 #工程機械控制器 #整車控制器 #車載控制器

LabVIEW運動控制(一):EtherCAT運動控制器的SCARA機械手應(yīng)用 #正運動技術(shù) #運動控制器
如何使用Arduino實現(xiàn)CAN總線通信呢
stm32與Arduino的比較
如何選擇合適的PID控制器
什么是PID控制器的原理 PID算法在自動化中的應(yīng)用

國產(chǎn)控制器廠家 整車控制器 以太網(wǎng)控制器 CAN控制器 國產(chǎn)化替代

車載智能控制器 工程機械控制器 CAN總線控制器 碩博電子 #控制器 #can總線 #國產(chǎn)化替代

評論