建立可傳回多個數值(陣列)的Arduino(C語言)自訂函式

C語言自訂函式的return敘述只能傳回一個變數值,若要傳回多個值,可以把資料存入陣列,然後傳回該陣列的起始(第一個元素)的地址。

然而,定義在函式裡的變數通常都是在函式執行時被建立、函式執行完畢之後被拋棄;為了讓函式呼叫敘述能接收到可用的陣列資料,程式必須防止自訂函式裡的區域變數被清除(註:函式的單一傳回值,會直接複製給呼叫方的變數,所以即使區域變數被回收了,數值仍能存在呼叫方的接收變數中)。

因此,可傳回陣列值的自訂函式必須滿足兩個條件:

  • 要傳回陣列的起始位址
  • 保留函式裡的區域變數

使用static關鍵字保留區域變數

在區域變數定義的前面加上static(代表靜態或沒有變動)關鍵字,該變數就能在函式執行之後被保留下來。宣告一個傳回陣列值的自訂函式語法如下:

宣告傳回陣列值的自訂函式語法

可傳回陣列值的Arduino函式範例程式

底下的例子中,自訂函式readSensors()將在每次執行時,在s陣列存入3個隨機數字,最後傳回s陣列的第一個元素位址。關於累進記憶體位址的說明,請參閱《超圖解Arduino互動設計入門》第八章「認識指標」單元(8-41頁)。

傳回陣列值的自訂函式的範例程式碼

編譯並上傳程式到Arduino,每隔一秒,它將在「序列埠監控視窗」顯示存在s陣列裡的3個隨機數字:

序列埠監控視窗

完整的程式碼如下:

2 thoughts on “建立可傳回多個數值(陣列)的Arduino(C語言)自訂函式

  1. 老師您好:
    從您的教學文件總能學到一些新奇的東西, 十分感激, 在此有個問題想要請教您:
    就是請問arduino的程式能夠先變成一個二進制rom檔後再燒到arduino裡嗎?
    因為我有個小治具要量產, 但不想將程式公開給廠商或工廠去upload到arduino
    所以想說有沒有機會先變成binary code再傳送給對方去做燒入動作, 麻煩老師, 謝謝

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *