相關推薦
您可能對下面課程感興趣
Arduino視頻教程基礎篇

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

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

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

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


現(xiàn)在你只需要在setup和loop中調(diào)用這兩個函數(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ù)建立與調(diào)用,有C語言基礎后,應該可以輕松掌握。


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

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

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