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