一個(gè)優(yōu)秀的Arduino玩家或者開(kāi)發(fā)者,當(dāng)然不能僅僅滿足于使用別人提供的庫(kù),純粹的拿來(lái)主義不是開(kāi)源精神,真正的開(kāi)源精神在于分享。
掌握本節(jié)的內(nèi)容后,你也可以將你編寫(xiě)的庫(kù)文件發(fā)表到互聯(lián)網(wǎng)上,讓眾多Arduino用戶來(lái)使用。
在編寫(xiě)類(lèi)庫(kù)前,還需要掌握函數(shù)的編寫(xiě)方法,這里我們?nèi)砸許R04超聲波傳感器為例。
[sf]
編寫(xiě)函數(shù)
你是否思考過(guò),如果程序中需要實(shí)現(xiàn)的功能不僅僅是獲取超聲波傳感器讀數(shù)和串口輸出,那程序的可讀性會(huì)變得怎樣呢?或者需要同時(shí)控制多個(gè)超聲波模塊,是否需要重復(fù)書(shū)寫(xiě)多次語(yǔ)句呢?
為了使程序看起來(lái)更清晰明了,可以將超聲波驅(qū)動(dòng)對(duì)端口的配置過(guò)程封裝成init_SR04函數(shù)。該函數(shù)僅完成超聲波相關(guān)初始化,無(wú)需返回值,因此可以使用void來(lái)聲明該函數(shù)。而超聲波的Trig引腳和Echo引腳,是其初始化必須使用兩個(gè)變量,我們將其設(shè)置為兩個(gè)參數(shù)。
init_SR04函數(shù)代碼如下:
- void init_SR04(int TrigPin,int EchoPin)
- {
- //初始化超聲波
- pinMode(TrigPin, OUTPUT);
- pinMode(EchoPin, INPUT);
- }
將發(fā)送觸發(fā)信號(hào),獲取并計(jì)算結(jié)果的過(guò)程封裝成GetDistance函數(shù)。
函數(shù)最后需要返回測(cè)出的距離,即一個(gè)float類(lèi)型的變量,因此在該函數(shù)我們使用float類(lèi)型聲明函數(shù)的返回值,并在函數(shù)中添加return語(yǔ)句,返回變量并退出函數(shù)。
GetDistance函數(shù)代碼如下:
[mw_shl_code=cpp,true]
float GetDistance (int TrigPin,int EchoPin)
{
//產(chǎn)生一個(gè)10μs的高脈沖去觸發(fā)TrigPin
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
float distance = pulseIn(EchoPin, HIGH) / 58.00;
return distance;
}[/mw_shl_code]
[mw_shl_code=cpp,true]
float distance;
void setup()
{
init_SR04(2,3);
Serial.begin(9600);
}
void loop()
{
distance= GetDistance (2,3);
Serial.print(distance);
Serial.print("cm");
Serial.println();
delay(1000);
}[/mw_shl_code]
這樣設(shè)計(jì)程序后,程序的整體可讀性增強(qiáng)了不少。這是簡(jiǎn)單的函數(shù)建立與調(diào)用,有C語(yǔ)言基礎(chǔ)后,應(yīng)該可以輕松掌握。
完整的程序代碼如下:
/*
通過(guò)函數(shù)實(shí)現(xiàn)SR04超聲波模塊驅(qū)動(dòng)
*/
float distance;
void init_SR04(int TrigPin,int EchoPin)
{
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
float GetDistance (int TrigPin,int EchoPin)
{
digitalWrite(TrigPin, LOW);
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
float distance = pulseIn(EchoPin, HIGH) / 58.0;
return distance;
}
void setup()
{
init_SR04(2,3);
Serial.begin(9600);
}
void loop()
{
distance= GetDistance (2,3);
Serial.print(distance);
Serial.print("cm");
Serial.println();
delay(1000);
}[/mw_shl_code]
[/sf]
掌握了函數(shù)的編寫(xiě)方法后,我們即可開(kāi)始編寫(xiě)類(lèi)庫(kù)。
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭(zhēng)議評(píng)論。
參與本評(píng)論即表明您已經(jīng)閱讀并接受
上述條款。