Mifare RFID-RC522模組實驗(二):C語言的結構(struct)與類型定義(typedef)說明

本單元的程式將在Arduino中紀錄一些Mifare標籤的識別碼,並且替它們標示名稱。每當掃描到這些標籤,Arduino就在序列埠監控視窗顯示它的名稱。識別碼可以用16進位、10進位…等格式表示。

Mifare標籤

認識C語言的結構(Struct)

C語言的陣列所儲存資料必須是相同的類型。如果要儲存一組包含不同類型的資料,可以使用結構(struct)

比較陣列(array)與結構(struct)

定義結構相當於規劃容器的「藍圖」。下圖右是定義儲存一個位元組陣列和一個字串的結構,結構裡的每一個資料欄位,稱為一個「成員」。

結構定義的語法

結構定義完畢後,就可以填入資料,這個步驟稱為「初始化結構資料」。下圖右的程式將利用RFIDTag這個「藍圖」,打造一個叫做“tag”的容器,並在其中填入UID識別碼和自訂的名稱。

初始化結構資料

存取結構裡的成員的語法如下,底下的敘述將取出tag裡的name資料:

取出結構資料

若要儲存一組結構資料,請使用陣列,底下的敘述將在tags陣列中儲存三組標籤的識別碼和名稱:

顯示Mifare標籤名稱的Arduino程式

本實驗單元的材料和電路,與前一篇貼文相同。完整的程式碼如下:

第18行的sizeof()將傳回結構和陣列資料佔用的位元組大小,此程式的陣列佔用18位元組,結構佔用6位元組,兩者相除之後存入totalTags,因此其值為3,代表一共有3個標籤元素。

第39行透過memcmp()函式比對陣列,相關語法和範例說明,請參閱《超圖解Arduino互動設計入門》18-16頁。

上傳程式碼之後,掃描Mifare標籤,Arduino的序列埠監控視窗將顯示類似下圖的結果:

序列埠監控視窗

使用typedef指令自訂資料類型

typedef指令能將現有的資料類型改成自訂的名稱,通常用於簡化類型名稱,語法如下:

我們可以把結構定義帶入typedef指令,如此,初始化結構資料時,就不用加上struct關鍵字:

使用typedef自訂結構資料類型

因此,上一節程式當中的結構定義和初始化語法,可改寫成:

其餘程式碼都一樣。

未完,待續…

延伸閱讀

發表迴響

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