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