步驟1:控制器電路
控制器在引腳2和3中具有BT模塊,在引腳4和2中具有開關(guān)由引腳11和12驅(qū)動(dòng)的LED。
已保留LED,以表明交換機(jī)正在執(zhí)行其工作。
步驟2:小工具電路
電路中顯示了Arduino Uno,因?yàn)樗子跍y(cè)試,但它可能是另一種類型,例如Nano對(duì)于移動(dòng)小工具會(huì)更好。引腳連接將相同。
BT模塊位于2和3中,和以前一樣。
H橋從8,9和10驅(qū)動(dòng)。
LED分別在11和12上。
電機(jī)應(yīng)該有一個(gè)小電容來(lái)順利完成操作,H橋連接應(yīng)具有1K電阻器以幫助保護(hù)Arduino。
步驟3:通信
現(xiàn)在可以設(shè)計(jì)命令了
數(shù)據(jù)需要有一種固定的格式,以便可以識(shí)別命令并知道它是正確的命令,而不僅僅是一些隨機(jī)數(shù)據(jù)。這本身就是一個(gè)整個(gè)行業(yè),但是可以發(fā)明一個(gè)簡(jiǎn)單的“協(xié)議”來(lái)完成這項(xiàng)工作。
每個(gè)命令的長(zhǎng)度正好為6個(gè)字符,并且參數(shù)最多為6個(gè)字符。/p》
每個(gè)命令將以“ @”符號(hào)開頭,并以“?!狈?hào)結(jié)尾。該命令本身當(dāng)然不能包含‘@’或‘?!?hào)。
因此,現(xiàn)在有效的命令如下所示:
@SPEED 150#
該命令以‘@’開頭,后6個(gè)字符為‘SPEED’,然后最多6個(gè)字符‘150’以‘?!Y(jié)尾。
此項(xiàng)目有四種命令類型,它們的類型分別為可能的參數(shù):
速度,0到255,設(shè)置電動(dòng)機(jī)速度
LEDRED ,打開或關(guān)閉,變成紅色LED開啟或關(guān)閉
LEDGRN ,打開或關(guān)閉,打開或關(guān)閉綠色LED
DIRECT ,F(xiàn)ORWRD或REVRSE,控件電機(jī)方向
從控制器發(fā)送的數(shù)據(jù)如下:
@SPEED 0#@ LEDREDON#@ LEDGRNOFF#@ DIRECTFORWRD#@ SPEED 120#
依此類推。
步驟4:控制器程序
程序的開頭設(shè)置了一些引腳分配,并啟動(dòng)了串行監(jiān)視器和BT模塊。
程序的其余部分圍繞讀取開關(guān)和電位器值并將它們發(fā)送到BT模塊。
字符串變量用于構(gòu)建“打印”到BT模塊的命令行。每次發(fā)送命令都會(huì)施加延遲。
通信中的重要考慮因素是定時(shí)。如果Controller發(fā)送數(shù)據(jù)的速度超過(guò)了Gadget接收數(shù)據(jù)的速度,則會(huì)丟失信息,并且遙控器將無(wú)法正常工作。
程序會(huì)循環(huán)循環(huán)并每次發(fā)送所有輸入值,因此4每個(gè)循環(huán)發(fā)送命令。這些的總時(shí)間可以使用延遲來(lái)調(diào)整。程序其他部分所需的時(shí)間最少,因?yàn)橄襁@樣的簡(jiǎn)單指令將在微秒內(nèi)執(zhí)行。
應(yīng)該有一套完整的控制值,每秒大約發(fā)送3次,這將非??鞂?duì)于我們的簡(jiǎn)單控制項(xiàng)目來(lái)說(shuō)足夠了。如果傳輸速度太慢,則可以提高BT模塊的UART速度。在更復(fù)雜的項(xiàng)目中可能會(huì)發(fā)生這種情況。兩個(gè)模塊都需要設(shè)置為相同的UART值,例如38400。請(qǐng)注意,這與串行監(jiān)視器的9600通訊速率無(wú)關(guān)。
第5步:小工具程序
小工具
定義中包含用于保存命令的字符串以及命令的兩個(gè)部分“命令類型”和“命令參數(shù)”。
應(yīng)避免延遲在這個(gè)程序中。如果程序運(yùn)行太慢,則可能會(huì)丟失一些命令。
程序循環(huán)將執(zhí)行以下步驟:
從BT模塊獲取命令
識(shí)別命令類型
執(zhí)行命令
重復(fù)
程序的結(jié)構(gòu)是這樣的,以便主循環(huán)識(shí)別該命令,然后調(diào)用一個(gè)函數(shù)來(lái)對(duì)其進(jìn)行處理。這樣可以輕松地將新命令添加到主循環(huán)中,并具有單獨(dú)的代碼塊來(lái)執(zhí)行該命令。例如,可以添加伺服器。良好的程序結(jié)構(gòu)也使查找錯(cuò)誤變得更加簡(jiǎn)單。
創(chuàng)建了一個(gè)名為GetDataFunction的函數(shù),用于從BT模塊讀取命令。
(該函數(shù)調(diào)用等效于BASIC中的gosub GetDataFunction)。
然后將命令分為cmdtype和cmdpara。
該命令必須位于要執(zhí)行的“ if”語(yǔ)句列表。任何無(wú)效的命令都將被忽略。例如,無(wú)效的命令可能是由于數(shù)據(jù)損壞或通信時(shí)序錯(cuò)誤造成的。
執(zhí)行命令的功能與電機(jī)控制程序中的功能完全一樣。
責(zé)任編輯:wv
-
Arduino
+關(guān)注
關(guān)注
188文章
6477瀏覽量
187556 -
藍(lán)牙遙控器
+關(guān)注
關(guān)注
0文章
6瀏覽量
7575
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論