一個(gè)優(yōu)秀的Arduino玩家或者開發(fā)者,當(dāng)然不能僅僅滿足于使用別人提供的庫(kù),純粹的拿來主義不是開源精神,真正的開源精神在于分享。
掌握本節(jié)的內(nèi)容后,你也可以將你編寫的庫(kù)文件發(fā)表到互聯(lián)網(wǎng)上,讓眾多Arduino用戶來使用。
在編寫類庫(kù)前,還需要掌握函數(shù)的編寫方法,這里我們?nèi)砸許R04超聲波傳感器為例。
[sf]
編寫函數(shù)
你是否思考過,如果程序中需要實(shí)現(xiàn)的功能不僅僅是獲取超聲波傳感器讀數(shù)和串口輸出,那程序的可讀性會(huì)變得怎樣呢?或者需要同時(shí)控制多個(gè)超聲波模塊,是否需要重復(fù)書寫多次語(yǔ)句呢?
為了使程序看起來更清晰明了,可以將超聲波驅(qū)動(dòng)對(duì)端口的配置過程封裝成init_SR04函數(shù)。該函數(shù)僅完成超聲波相關(guān)初始化,無需返回值,因此可以使用void來聲明該函數(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é)果的過程封裝成GetDistance函數(shù)。
函數(shù)最后需要返回測(cè)出的距離,即一個(gè)float類型的變量,因此在該函數(shù)我們使用float類型聲明函數(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)該可以輕松掌握。
完整的程序代碼如下:
/*
通過函數(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ù)的編寫方法后,我們即可開始編寫類庫(kù)。
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭(zhēng)議評(píng)論。
參與本評(píng)論即表明您已經(jīng)閱讀并接受
上述條款。