帶無(wú)線控制器的乒乓球比賽 - 示意圖

自定義控制原理圖(基礎(chǔ))。查看完整尺寸版本。

無(wú)線控制器和乒乓球比賽工作
這個(gè)項(xiàng)目分為三個(gè)主要部分:控制器,服務(wù)器和乒乓球比賽。服務(wù)器本身很容易使用。不需要特殊的服務(wù)器代碼,因?yàn)樗鼘⒁龅奈ㄒ还ぷ魇菍?shù)據(jù)包從控制器重新路由到乒乓球游戲。該項(xiàng)目的所有文件都以ZIP文件形式提供。
控制器
控制器本身只包含一個(gè)兼容RIOT的PIC器件(如PIC16F1516)和一些外部器件,包括功率調(diào)節(jié)和幾個(gè)開(kāi)關(guān)。當(dāng)控制器打開(kāi)時(shí),器件配置為確保為ESP8266正確配置UART,在接收到UART字節(jié)時(shí)觸發(fā)中斷,內(nèi)部振蕩器處于最大速度,并且所有IO端口都配置為輸入或輸出。設(shè)置代碼完成后,微控制器需要啟動(dòng)RIOTOUS并嘗試通過(guò)Wi-Fi連接到路由器(這是您需要填寫(xiě)自己的詳細(xì)信息,包括SSID和密碼)。一旦建立了Wi-Fi連接,微控制器就會(huì)進(jìn)入循環(huán),不斷嘗試連接到我們的RIOTOUS服務(wù)器(同樣,您需要填寫(xiě)托管RIOTOUS服務(wù)器的計(jì)算機(jī)的IP地址)。建立連接后,控制器會(huì)發(fā)送一條消息,讓服務(wù)器在其日志中顯示,并告知服務(wù)器其唯一ID。 RIOTOUS服務(wù)器根據(jù)它們所連接的端口識(shí)別設(shè)備,但每個(gè)連接的設(shè)備也可以具有唯一的ID。這個(gè)唯一ID與MAC地址的工作方式幾乎完全相同,如果兩個(gè)客戶(hù)端想要相互通信(例如,控制器和乒乓球游戲),它們都需要一個(gè)唯一的ID,然后要求服務(wù)器重新路由數(shù)據(jù)到具有唯一ID的設(shè)備。設(shè)置設(shè)備的唯一ID非常簡(jiǎn)單,只需要兩個(gè)字節(jié):字母“I”和第二個(gè)字節(jié),其值代表唯一ID(0到255)。在我們的例子中,我們將控制器的唯一ID設(shè)置為“M”,因此將數(shù)據(jù)包發(fā)送到服務(wù)器“IM”。
一旦所有啟動(dòng)代碼都有已執(zhí)行,主循環(huán)啟動(dòng)。此循環(huán)只是查找按鈕按下并根據(jù)當(dāng)前按鈕狀態(tài)發(fā)送消息。上下按鈕僅在按下或釋放按鈕時(shí)發(fā)送消息,而每次代碼循環(huán)時(shí),開(kāi)始按鈕將發(fā)送消息。
游戲
游戲本身是使用名為Multimedia Fusion 2.5的程序制作的,是一個(gè)軟件包,可以在不使用代碼的情況下進(jìn)行游戲制作。盡管沒(méi)有使用代碼,但該軟件功能強(qiáng)大且比大多數(shù)人認(rèn)為的更靈活。程序是使用點(diǎn)擊式系統(tǒng)制作的,具有可配置的事件和操作,具有許多擴(kuò)展,允許用戶(hù)執(zhí)行任何操作(包括網(wǎng)絡(luò),目錄搜索,系統(tǒng)進(jìn)程查看等)。雖然MMF2易于使用,但我建議您在進(jìn)行此項(xiàng)目之前嘗試更輕松的項(xiàng)目,因?yàn)槟枰恍╆P(guān)于可變值和基本游戲練習(xí)的知識(shí)。
在我們的乒乓球在游戲中,我們利用了RIOTOUS小部件,它包含一個(gè)對(duì)象,兩個(gè)moo套接字和一些處理所有數(shù)據(jù)傳輸?shù)拇a。需要完成的第一項(xiàng)任務(wù)是更改RIOTOUS小部件的一些可變值。 “服務(wù)器IP”需要設(shè)置為RIOTOUS服務(wù)器的IP地址,“廣告端口”需要設(shè)置為廣告端口(默認(rèn)為333),“唯一ID”需要設(shè)置為唯一ID。游戲,將是“A。”

完成后,我們需要讓RIOTOUS小部件連接到游戲首次啟動(dòng)時(shí)的RIOTOUS服務(wù)器,這是通過(guò)在觸發(fā)“開(kāi)始幀”事件時(shí)將可更改字符串“Connect”設(shè)置為“true”來(lái)完成的。發(fā)生這種情況時(shí),RIOTOUS會(huì)自動(dòng)嘗試連接到服務(wù)器,如果成功,“ServerConnectionStatus”將等于“true”。

現(xiàn)在RIOTOUS小部件已將我們連接到服務(wù)器,我們等到用戶(hù)按下無(wú)線控制器上的開(kāi)始按鈕,按下后,控制器將文本“RADBSTART”發(fā)送到服務(wù)器。服務(wù)器首先查看第一個(gè)字母并確定所請(qǐng)求的操作是什么。在這種情況下,第一個(gè)字母是R,表示重定向。下一個(gè)字母/字節(jié)是將消息重定向到的唯一ID(在本例中為A)。然后將其余數(shù)據(jù)發(fā)送到具有唯一ID(DBSTART)的設(shè)備。
當(dāng)客戶(hù)端(我們的游戲)收到此包時(shí),它會(huì)查看第一個(gè)字母以確定數(shù)據(jù)包是什么。我們數(shù)據(jù)包中的第一個(gè)字母是D,代表“數(shù)據(jù)”,因此客戶(hù)端將數(shù)據(jù)包“DBSTART”放入其數(shù)據(jù)緩沖區(qū),并將“DataAvailable”變量設(shè)置為“true”。如果游戲檢測(cè)到此數(shù)據(jù)包,則啟用控制游戲的事件(玩家控制和游戲事件)。當(dāng)從RIOTOUS小部件讀取成功的數(shù)據(jù)時(shí), 您必須清除緩沖區(qū)中的數(shù)據(jù)并將“DataAvailable”設(shè)置為false!

完成后,我們的游戲運(yùn)行,按下按鈕可上下移動(dòng)劃水板。但是,當(dāng)按下按鈕時(shí),它只發(fā)送一條消息,因?yàn)槲⒖刂破鞯乃俣炔蛔阋苑磸?fù)向游戲發(fā)送移動(dòng)數(shù)據(jù)。因此,在我們的游戲中,如果檢測(cè)到按鈕按下,則播放器將朝該方向移動(dòng) ,直到釋放按鈕 。這提供了平滑響應(yīng)控制的效果,并且由于控制器和游戲之間的延遲小于20ms,因此給人的印象是正在使用有線控制器。

您可能已經(jīng)注意到檢查可用數(shù)據(jù)的最后一個(gè)事件是否為真。關(guān)于MMF2的好處是事件按順序執(zhí)行,以便事件16始終在事件17之前執(zhí)行。在我們的示例中,如果已發(fā)送損壞的數(shù)據(jù)且沒(méi)有觸發(fā)任何數(shù)據(jù)事件,則最后一個(gè)數(shù)據(jù)可用事件將清除緩沖區(qū),以便新數(shù)據(jù)可以到達(dá)。游戲代碼本身不會(huì)被解釋?zhuān)驗(yàn)樗茿)MMF2文件中的微不足道而B(niǎo))不太重要。什么 重要的是RIOTOUS客戶(hù)端,服務(wù)器和MMF2之間的通信。
構(gòu)建
您可以使用許多不同的技術(shù)構(gòu)建此項(xiàng)目。第一個(gè)也是最簡(jiǎn)單的方法是構(gòu)建一個(gè)RIOTOUS開(kāi)發(fā)板(上面提供的原理圖)或者獲得一個(gè)RIOTOUS開(kāi)發(fā)板(很快就可用)。但是,如果您需要個(gè)性化控制器,則可以使用不同的電路構(gòu)造技術(shù),包括面包板,條形板,矩形板和PCB。控制器需要兼容RIOTOUS(》 4 MIPS,4KB ROM和256字節(jié)RAM),下面是控制器板PCB布局的示例。

通用控制器PCB的一個(gè)例子(需要按鈕和其他輸入的屏蔽)
此項(xiàng)目中使用的開(kāi)發(fā)板(PIC16F1516)
-
無(wú)線控制器
+關(guān)注
關(guān)注
0文章
31瀏覽量
11272
發(fā)布評(píng)論請(qǐng)先 登錄
二極管的原理
#機(jī)井灌溉智能控制設(shè)備 #智能機(jī)井控制器 #無(wú)線遠(yuǎn)傳超聲波水表 #智能機(jī)井灌溉刷卡控制器
用了開(kāi)關(guān)量無(wú)線控制器,真的能省工省心嗎?
風(fēng)洞懸浮球:基于RT-Thread與MCXA156的簡(jiǎn)單控制實(shí)踐 | 技術(shù)集結(jié)
無(wú)線對(duì)傳開(kāi)關(guān)控制器:4G全網(wǎng)通,不限距離傳輸
車(chē)載整機(jī)控制器 工程機(jī)械主機(jī)控制器#碩博電子#國(guó)產(chǎn)控制器
工程機(jī)械控制器廠家 控制器國(guó)產(chǎn)替代 #國(guó)產(chǎn)控制器#控制器廠家#控制器品牌
無(wú)線遠(yuǎn)程自動(dòng)水位控制器如何逆襲成智能終端?
無(wú)線對(duì)傳開(kāi)關(guān)控制器
無(wú)線液位控制器的應(yīng)用和原理,這回終于搞懂了
怎樣用無(wú)線控制器控制乒乓球比賽
評(píng)論