標籤:

Arduino編程風格(譯)

原文:Arduino style guide

地址:Arduino - StyleGuide

譯者註:本文將告訴你如何寫一個Arduino示例,文中介紹了Arduino規範化編程的一些準則,這些準則在其他語言編程中同樣適用,因此具有一定的參考價值!

這是一個用於編寫規範的Arduino示例的指南,適合初學者和同樣也適合高級用戶使用。當然您大可不必按照這種方式編程,但是如果您想要您的代碼可以讓不同水平的都可以清晰的讀懂,那麼它可以幫到您。這不是一套強硬的準則,僅僅只是一些參考。有些參考甚至可能彼此衝突。利用您的判斷力在何時這些指導原則最通順上,如果您不確定,諮詢那些將要通過您寫的例子學習的人,這會讓您有更好的理解。另外您有可能對Arduino API風格指南感興趣。

寫一個教程

(大部分內容是從多年來各家的編輯那裡引用來的)

  • 請用主動語態寫
  • 語言寫得清楚直白,就像遵循你的指令的人和你在一個房間一樣。
  • 在給一些指令時,最好用第二人稱,以便讀者明白她將是執行者。
  • 請使用短小,簡潔的陳述句或命令而不是複合句。這可以讓讀者更容易一次消化一個指令。
  • 請給出明確的指示就像:

    「下一步,你將要讀取感測器」

    「創建一個名為thisPin的變數」

    避免沒有意義的短語。不要告訴讀者「您要設置引腳」這樣的指示,只需要告訴她「設置引腳」
  • 請使用圖片和原理圖,而不是僅僅只有原理圖。 許多電子愛好者不讀原理圖。
  • 檢查你的假設。讀者是否理解您在教程中使用的所有概念? 如果沒有,解釋或鏈接到另一個教程。
  • 從概念上解釋事物,這樣讀者對他將要做的就有一個大的了解。 然後安排如何一步一步的執行指令。
  • 每當您初次使用一個技術術語時,請先定義它。請人幫忙您檢查您是否定義了所有的新術語,您有可能會漏掉其中一兩個。
  • 請與您使用過的術語保持一致。如果您通過新名稱引用元件或概念,請將其與其他名稱的關係明確顯示。除非您明確告訴讀者兩個術語是等價的,否則不要使用兩個可以互相交換的術語。

  • 在沒有拼寫出它們的全稱前不要使用縮寫詞或縮寫

  • 讓您的例子更加簡潔有針對性。除非是關於組合概念的教程,否則不要組合概念或功能。

寫示例代碼

  • 穩定比效率更重要。
  • Arduino的主要用戶都是一些不關注代碼的初學者,他們關心的重點是項目的完成。
  • 別人比你了解代碼少是很正常的事。不要認為他們需要理解一些學術概念。他們不需要,他們不理解代碼不是因為他們愚蠢。你的代碼應該可以自我解釋,或者使用注釋來做同樣的事情。如果需要一個複雜的概念,如寄存器、中斷或指針,要麼解釋它,要麼跳過它。
  • 在面臨技術上簡單和高效選擇時,請選擇前者。
  • 除非介紹的概念很有用,否則盡量少介紹並且在每個例子中減少新概念的數量。例如,在剛開始,您可以解釋沒有int以外的變數類型的簡單函數,也可以用常數來定義引腳號。另一方面,在一個中間的例子中,您可能希望引入周邊概念,因為它們變得有用。 像使用const ints來定義引腳號的概念,當你不需要超過0 - 255時,在int中選擇位元組等等是有用的,但這不是入門的核心。 所以請謹慎使用它們,並在新教程中解釋它們。
  • 請將setup()(聲明函數)和loop()(循環函數)放在程序開頭。它們幫助初學者了解程序的概況,因為所有其他功能都是從這兩個方法調用的。

注釋你的代碼

  • 注釋所有的變數和常量聲明,並且聲明變數的作用。
  • 注釋所有的代碼塊。如果可能的話,在代碼塊前注釋,這樣讀者就能了解代碼塊的作用。
  • 注釋所有的循環。
  • 使用詳細的if語句。即為了可以將代碼更加直觀的呈現給讀者,請使用程序塊格式進行所有操作。避免使用下面這種格式:

    if (somethingsIsTrue) doSomething

    用下面這種格式代替:

    if (somethingsIsTrue==True){ doSomething; }

  • 避免使用指針
  • 避免使用#define

變數

  • 避免使用單字母變數名。使它們具有描述性。
  • 避免使用像val和pin這樣的變數名。讓它們更加具有描述性,像buttonState或者switchPin。
  • 如果要定義引腳名稱和其他不會改變的數值,請使用const ints。他們與#defines相比不是那麼凌亂,但仍然給你一種講解變數和常數之間的區別的方法。
  • 使用接線/處理類型的變數類型,例如 boolean,char,byte,int,unsigned int,long,unsigned long,float,double,string,array,void,如果可能的話,盡量不用uint8_t等。前者在文檔中有說明,更簡潔的名稱。
  • 避免讓用戶混淆的編號方案,像:

    pin1 = 2pin2 = 3etc.

  • 如果你需要重新編號引腳,考慮使用數組,如下所示:

    int myPins[] = { 2, 7, 6, 5, 4, 3 };

  • 這允許您使用數組元素來引用新的引腳號,如下所示:

    digitalWrite(myPins[1], HIGH); //打開引腳7

  • 它還允許您按照所需的順序打開或關閉所有引腳,如下所示:

    for (int thisPin = 0; thisPin < 6; thisPin++) { digitalWrite(myPins[thisPin], HIGH); delay(500); digitalWrite(myPins[thisPin], LOW); delay(500);}

剛開始就解釋代碼

這是一個很好的標題塊:

/* 程序標題 從一個外行人的視角來解釋程序的功能。請參閱各種引腳附件。 電路: * 列出每個輸入組件 * 列出每個輸出組件 創建年月日 創建者名字 修改年月日 修改者名字 http://url/of/online/tutorial.cc*/

電路

  • 對於數字輸入開關,默認是在開關上使用下拉電阻,而不是上拉。 這樣,開關的交互邏輯對非工程師是有意義的。
  • 保持您的電路簡單。例如,旁路電容器是方便的,但是大多數簡單的輸入可以在沒有它們的情況下正常工作。 如果一個組件是偶然的,請稍後解釋。
  • 更正,建議和新的文件應該發布到論壇。

Arduino參考文本以Creative Commons Attribution-ShareAlike 3.0許可證授權。指南中的代碼示例將公布到公共區域。

個人學習翻譯作品,感謝好友@Morning在翻譯過程中提供的指導

繼承Arduino開源精神,本文同樣以Creative Commons Attribution-ShareAlike 3.0許可證授權,您可以自由分享,修改,或者引用,引用時希望您尊重個人努力成果,註明來源。個人水平有限,不足之處還望多多指正

推薦閱讀:

如何學習C語言
Learn to code from good webs
用表格思想理解資料庫存儲
ACM演算法之博弈
個人的努力在時代的進步面前不值一提

TAG:Arduino | 編程 |