相關(guān)推薦
您可能對(duì)下面課程感興趣
Arduino視頻教程基礎(chǔ)篇

75小節(jié)已有138544人學(xué)過

Arduino教程——編寫Arduino類庫(kù)(1)
發(fā)布時(shí)間:2022-03-11 09:47 [ 我要自學(xué)網(wǎng)原創(chuàng) ] 發(fā)布人: 小劉2175 閱讀: 2163
一個(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ù)代碼如下:

  1. void init_SR04(int TrigPin,int EchoPin)
  2. {
  3.         //初始化超聲波
  4. pinMode(TrigPin, OUTPUT);
  5.         pinMode(EchoPin, INPUT);
  6. }
復(fù)制代碼

將發(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]


現(xiàn)在你只需要在setup和loop中調(diào)用這兩個(gè)函數(shù),就可以完成之前的功能了:
[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)該可以輕松掌握。


完整的程序代碼如下:
[mw_shl_code=cpp,true]
/*
通過函數(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ù)。
Arduino視頻教程基礎(chǔ)篇
我要自學(xué)網(wǎng)商城 ¥40 元
進(jìn)入購(gòu)買
文章評(píng)論
0 條評(píng)論 按熱度排序 按時(shí)間排序 /350
添加表情
遵守中華人民共和國(guó)的各項(xiàng)道德法規(guī),
承擔(dān)因您的行為而導(dǎo)致的法律責(zé)任,
本站有權(quán)保留或刪除有爭(zhēng)議評(píng)論。
參與本評(píng)論即表明您已經(jīng)閱讀并接受
上述條款。
V
特惠充值
聯(lián)系客服
APP下載
官方微信
返回頂部
相關(guān)推薦
您可能對(duì)下面課程感興趣
Arduino視頻教程基礎(chǔ)篇

75小節(jié)已有138544人學(xué)過

分類選擇:
電腦辦公 平面設(shè)計(jì) 室內(nèi)設(shè)計(jì) 室外設(shè)計(jì) 機(jī)械設(shè)計(jì) 工業(yè)自動(dòng)化 影視動(dòng)畫 程序開發(fā) 網(wǎng)頁(yè)設(shè)計(jì) 會(huì)計(jì)課程 興趣成長(zhǎng) AIGC