串行對(duì)象
盡管是一個(gè)旨在創(chuàng)建游戲的軟件包,但Clickteam Fusion 2.5具有通信功能,包括TCP(MooSock)和串行端口(串行對(duì)象)。串行端口提供了一種簡(jiǎn)單而有效的通信方法,用于在主機(jī)PC和外部設(shè)備(如微控制器)之間傳輸數(shù)據(jù)。但是,串行端口大部分已從主板上移除,并由現(xiàn)在常見(jiàn)的USB端口(通用串行端口)取代。雖然USB支持高速和尋址技術(shù),但它也非常復(fù)雜,只有少數(shù)業(yè)余愛(ài)好者敢于在項(xiàng)目中使用USB。實(shí)現(xiàn)USB的許多障礙之一是需要驅(qū)動(dòng)程序,這在基于Windows的計(jì)算機(jī)上可能會(huì)非常棘手。然而,一些非常聰明的人創(chuàng)建了橋接IC,它實(shí)質(zhì)上將一種總線協(xié)議轉(zhuǎn)換為另一種。一種常用的橋接器是串行到USB轉(zhuǎn)換器,允許串行設(shè)備通過(guò)USB端口與PC通信。
在Windows中,當(dāng)串行到USB橋接器連接到USB端口時(shí),它將其識(shí)別為虛擬串行端口。您可以通過(guò)設(shè)備管理器》端口找到串行端口名稱(chēng)。
如果您無(wú)法識(shí)別哪個(gè)PORT設(shè)備是Arduino,您可以斷開(kāi)設(shè)備,記下剩余的端口,然后重新連接設(shè)備。應(yīng)該出現(xiàn)一個(gè)新端口,這是Ardunio的串口。就我而言,端口是COM7(USB-SERIAL CH340)。
現(xiàn)在我們知道了串口的名稱(chēng),現(xiàn)在是時(shí)候進(jìn)行融合應(yīng)用了。首先加載Clickteam Fusion 2.5并創(chuàng)建一個(gè)新的空項(xiàng)目。加載第一幀,然后添加串行對(duì)象。如果找不到串行對(duì)象,則需要將其安裝到擴(kuò)展文件夾中。為此,首先單擊此處下載串行對(duì)象,然后將zip文件的內(nèi)容拖到Clickteam Fusion 2.5安裝文件夾中?,F(xiàn)在我們的框架中有一個(gè)串行對(duì)象,我們需要進(jìn)入事件編輯器,然后創(chuàng)建新條件“Start of Frame”,然后添加事件“Open Serial Port”。
第一個(gè)此事件所需的參數(shù)是要打開(kāi)的端口 - 在我們的示例中,這將是7(您不需要添加COM,只需要添加COM編號(hào))。第二個(gè)參數(shù)是波特率,對(duì)于我們的項(xiàng)目,我們將使用9600的波特率。串行對(duì)象不允許其他功能,如奇偶校驗(yàn)和停止位,但這不應(yīng)該是一個(gè)問(wèn)題,因?yàn)槟J(rèn)值似乎是8位數(shù)據(jù),一個(gè)停止位,沒(méi)有奇偶校驗(yàn)位。雖然這適用于我們的簡(jiǎn)單項(xiàng)目,但更高級(jí)的項(xiàng)目可能希望能夠動(dòng)態(tài)連接到串行設(shè)備。執(zhí)行此操作的最佳方法是使用計(jì)數(shù)器并按順序連接到每個(gè)端口號(hào)。下一個(gè)事件是檢查COM端口是否打開(kāi),如果是,發(fā)送一條簡(jiǎn)單的消息,例如“你的ID是什么?”我們想要連接的設(shè)備將被編程為使用唯一的ID進(jìn)行響應(yīng)當(dāng)它收到這樣的消息。我們的MMF2.5程序?qū)z測(cè)到此響應(yīng),如果ID與預(yù)期的匹配,則它知道它已連接到正確的設(shè)備。如果沒(méi)有,它可以遞增計(jì)數(shù)器并繼續(xù)連接到所有可能的端口,直到找到它所尋找的端口。
隨著Arduino的連接,我們當(dāng)按下其中一個(gè)按鈕時(shí),需要通過(guò)串口發(fā)送數(shù)據(jù)。通過(guò)在所需條件下使用“發(fā)送數(shù)據(jù)”事件,可以輕松完成此操作。我們發(fā)送的兩個(gè)不同的數(shù)據(jù)包是“LED On Please”用于打開(kāi)LED,“LED Off Please”用于關(guān)閉它。
當(dāng)Arduino完成命令后,它將響應(yīng)LED的狀態(tài)。但是,println()函數(shù)還在字符串的末尾添加換行符,因此如果我們嘗試使用該字符串,我們將永遠(yuǎn)無(wú)法使其正常工作。因此,我們必須清理數(shù)據(jù)并刪除換行符(0x0D 0x0A)。為此,我們首先從串行對(duì)象條件“數(shù)據(jù)正在等待”開(kāi)始(只要通過(guò)串行端口接收數(shù)據(jù),就會(huì)觸發(fā)此條件)。當(dāng)這個(gè)條件觸發(fā)時(shí),我們執(zhí)行三個(gè)事件:獲取緩沖區(qū)中等待的字節(jié)數(shù)并存儲(chǔ)該數(shù)字,存儲(chǔ)接收到的字符串,并清理字符串。前兩個(gè)很容易做,但清理數(shù)據(jù)需要一些計(jì)算。首先,我們使用Mid $(中間字符串),它可以從字符串中獲取片段。字符串源設(shè)置為通過(guò)串行端口接收的字符串,起始字符設(shè)置為0(因?yàn)槲覀兿M⒌拈_(kāi)始),但字符數(shù)設(shè)置為接收的字節(jié)數(shù)減去2.這樣,換行符被忽略!
我們程序的最后一步是將這個(gè)已清理的字符串與兩條消息中的一條進(jìn)行比較,結(jié)果,使LED圖標(biāo)顯示或消失。/p》
Arduino
Arduino代碼非常簡(jiǎn)單并使用Arduino提供的免費(fèi)IDE(用C ++編寫(xiě))編寫(xiě)。當(dāng)我們的Arduino啟動(dòng)時(shí),它會(huì)運(yùn)行void setup()中的代碼,這就是我們將LED端口配置為輸出,設(shè)置串口以使用9600的波特率,然后關(guān)閉LED 。當(dāng)主循環(huán)啟動(dòng)時(shí),Arduino會(huì)不斷檢查串行緩沖區(qū)以查看是否有可用的數(shù)據(jù)。一旦數(shù)據(jù)可用,它就會(huì)將這些數(shù)據(jù)傳輸?shù)揭粋€(gè)名為“message”的字符串中,我們將其用于比較。第一次比較檢查是否應(yīng)該打開(kāi)LED,第二次比較檢查L(zhǎng)ED是否應(yīng)該關(guān)閉,并且兩次比較都相應(yīng)地發(fā)送有關(guān)LED狀態(tài)的信息。
-
串行
+關(guān)注
關(guān)注
0文章
237瀏覽量
34507 -
Arduino
+關(guān)注
關(guān)注
190文章
6498瀏覽量
192175
發(fā)布評(píng)論請(qǐng)先 登錄
ad0804怎樣得到2.5V基準(zhǔn)電壓?
韓國(guó)企業(yè)Mythosia發(fā)布面向嵌入式行業(yè)的腳本驅(qū)動(dòng)串行通信

評(píng)論