一個(gè)SR04超聲波類(lèi)庫(kù)編寫(xiě)完成了,但它還不是一個(gè)完美的Arduino類(lèi)庫(kù),因?yàn)樗麤](méi)有一個(gè)可以讓Arduino IDE識(shí)別并高亮關(guān)鍵字的keywords.txt文件,我們?cè)俳⒁粋(gè)keywords.txt文件,并鍵入以下代碼:
[mw_shl_code=cpp,true]SR04 KEYWORD1
GetDistance KEYWORD2[/mw_shl_code]
需要注意的是“SR04 KEYWORD1”及“GetDistance KEYWORD2”之間的空格,應(yīng)由鍵盤(pán)“Tab”鍵輸入。
在Arduino IDE的關(guān)鍵字高亮中,會(huì)識(shí)別KEYWORD1為數(shù)據(jù)類(lèi)型高亮方式,KEYWORD2為函數(shù)高亮方式。
有了keywords.txt,在Arduino IDE里使用該類(lèi)庫(kù),你就能看到代碼高亮效果了。
一個(gè)完整的Arduino類(lèi)庫(kù)就建立好了。
使用該類(lèi)庫(kù),你需要在Arduino IDE安裝目錄下的libraries文件夾中新建一個(gè)名為SR04的文件夾,并將SR04.h、SR04.cpp、keywords.txt三個(gè)文件放入該文件夾中(如圖4-5)。
圖4-5 一個(gè)完整的Arduino庫(kù)
建立示例程序
為了方便其他用戶(hù)學(xué)習(xí)和使用你編寫(xiě)的類(lèi)庫(kù),你還可以在SR04文件夾中新建一個(gè)examples文件夾,并放入你提供的示例程序,方便其他使用者學(xué)習(xí)和使用這個(gè)類(lèi)庫(kù)。這里,我在examples文件夾中新建了一個(gè)SR04_Example文件夾,并放入了一個(gè)SR04_Example.ino文件(如圖4-6)。需注意的是ino文件所在文件夾需要與該ino文件同名。
圖4-6 添加示例程序
SR04_Example.ino完整程序代碼如下:
[mw_shl_code=cpp,true]#include <SR04.h>
SR04 ultrasonic = SR04(2,3);
void setup()
{
Serial.begin(9600);
}
void loop()
{
float distance = ultrasonic.GetDistance();
Serial.print(distance);
Serial.print("cm");
Serial.println();
}[/mw_shl_code]
至此,一個(gè)完整的Arduino類(lèi)庫(kù)就建立完成了,重啟Arduino IDE后,在Arduino IDE菜單>文件>示例 中可以找到該示例程序。編譯并下載示例程序到你的Arduino控制器,驗(yàn)證你的類(lèi)庫(kù)是否還需要修改。
類(lèi)庫(kù)優(yōu)化與發(fā)布
為了方便理解和學(xué)習(xí)Arduino類(lèi)庫(kù)的編寫(xiě)方法,筆者在教學(xué)中將庫(kù)進(jìn)行了一定簡(jiǎn)化。你可能會(huì)在使用過(guò)程中遇到一些檢測(cè)出錯(cuò)的情況,例如檢測(cè)到的距離過(guò)大或?yàn)?等。你可以對(duì)這個(gè)庫(kù)進(jìn)行更多的優(yōu)化,使之達(dá)到更好的檢測(cè)效果。
這里給出三種優(yōu)化思路,大家可以自己嘗試優(yōu)化這個(gè)類(lèi)庫(kù):
1.當(dāng)檢測(cè)到的距離超出了SR04超聲波模塊可檢測(cè)的范圍時(shí)(3cm-450cm),輸出錯(cuò)誤信息或者重新檢測(cè);
2.每次檢測(cè)時(shí),檢測(cè)兩次或者多次,將得到的值做比較,如果偏差較大,則認(rèn)為是檢測(cè)出錯(cuò),并放棄檢測(cè)結(jié)果,重新檢測(cè)距離;
3.使用pulseIn(pin, value, timeout) 取代pulseIn(pin, value) 檢測(cè)脈沖寬度,通過(guò)限定檢測(cè)脈沖超時(shí)時(shí)間來(lái)限定超聲波傳感器的檢測(cè)距離。
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭(zhēng)議評(píng)論。
參與本評(píng)論即表明您已經(jīng)閱讀并接受
上述條款。