2013年2月8日 星期五

[PiFace Digital 五部曲] 使用 C 語言控制 PiFace 擴充卡

網頁最後修改時間:2018/08/02

PiFae Digital 在樹莓派作業系統的環境設定與軟體安裝是一連貫的步驟,請從"七部曲設置 PiFace Digital 擴充板" 開始。

Step 5:使用 C 語言控制 PiFace 擴充卡

PiFace 的 C 語言函式庫可以使用在步驟 3 安裝仿真軟體所產生的目錄,就有檔案可以安裝。

進行安裝之前,我們必須先安裝 automake 套件,不然在接下來執行 autogen.sh 會找不到 autoreconf 這個檔案

pi@raspberrypi ~ $ sudo apt-get install automake libtool

輸入下面指令進行 piface C 語言函式庫安裝

pi@raspberrypi ~ $ cd piface/c/
pi@raspberrypi ~/piface/c $./autogen.sh && ./configure && make && sudo make install

查看安裝 log



完成安裝之後,切換進入到範例程式目錄下,並對 input_read.c 做編譯

pi@raspberrypi ~/piface/c $ cd examples
pi@raspberrypi ~/piface/c/examples $ gcc -L /usr/local/lib -l piface-1.0 -o input_reader input_reader.c
pi@raspberrypi ~/piface/c/examples $ ls -l
總計 24
-rw-r--r-- 1 pi pi  129  2月  4 21:50 board_reset.c
-rwxr-xr-x 1 pi pi 5889  2月  5 22:10 input_reader
-rw-r--r-- 1 pi pi  251  2月  4 21:50 input_reader.c
-rw-r--r-- 1 pi pi  374  2月  4 21:50 Makefile
-rw-r--r-- 1 pi pi  353  2月  4 21:50 the_amazing_led_show.c


接著執行,就會出現找不到函式庫的訊息出現,這時心中一把無名火升起 @#$%^&,又要找問題了 !!!

pi@raspberrypi ~/piface/c/examples $ sudo ./input_reader
./input_reader: error while loading shared libraries: libpiface-1.0.so.0: cannot open shared object file: No such file or directory

其餘解法很簡單!就是重新將函式庫的路徑整理一下。

執行下面指令,再重新執行 input_read 就可以了;這時你可以按下按鈕,看相對應的數字怎麼變化

pi@raspberrypi ~/piface/c/examples $ sudo sbin/ldconfig
pi@raspberrypi ~/piface/c/examples $ sudo ./input_reader
Input port: 0xff
Input port: 0xff
Input port: 0xff
Input port: 0xff
Input port: 0xfd
Input port: 0xff
Input port: 0xfb
Input port: 0xfe
Input port: 0xfe
Input port: 0xff
pi@raspberrypi ~/piface/c/examples $

備註:ldconfig
讀出 /lib, /usr/lib, /etc/ld.so.conf 內的路徑之下的 shared library (ldconfig 會略過 symbolic link), 將結果寫入 /etc/ld.so.cache

目錄下面還有幾個範例程式 ~piface/c/example/ 可以試試,都已經編譯成執行檔了,

gcc -L /usr/local/lib -l piface-1.0 -o 輸出名稱 檔案名稱.c

要執行測試輸入 sudo ./檔案名稱 就可以了,以下不再贅述!

要使用函式庫時,要在檔案上方加入標頭檔,主程式 ( main() ) 開頭要加 pfio_init() 做函式庫初始化,結尾要加 pfio_deinit(),如下範例程式所示

#include <libpiface-1.0/pfio.h>

int main(void)
{
    if (pfio_init() < 0)
        exit(-1);

    /*
      在這邊加入程式碼
    */

    pfio_deinit();
    return 0;
}


下面是 PiFace C 語言函式庫 幾個介面控制的主要函式:
  • pfio_deinit()
  • 不再使用 PiFace 時呼叫,函式執行之後會暫留現有 PiFace 狀態

  • pfio_digital_read(pin_number)
  • 回傳所讀取的輸入接腳 ( pin_number ) 訊號,0 或 1

  • pfio_digital_write(pin_number, value)
  • 設定輸出接腳 ( pin_number ) 狀態 0 ( Low )或 1 ( High );當設定為 1 時會點亮 LED 並使得 開集極 ( open-collector ) 可以沉入電流 ( sink current )

  • pfio_get_pin_bit_mask(pin_number)
  • 以位元方式回傳輸入的數字到指定的位元位置。例如 pin_number = 3 則回傳 0b00000100,pin_number = 6 則回傳 0b00100000

  • pfio_get_pin_number(bit_pattern)
  • 輸入位元資料,輸入對應的接腳。例如 bit_pattern = 0b00001000 則回傳 3,bit_pattern = 0b01000000 則回傳 6

  • pfio_init()
  • PiFace 初始化,必須再使用輸出輸入函式之前呼叫

  • pfio_read_input()
  • 以二進制方式回傳輸入接腳全部的狀態

  • pfio_read_output()
  • 以二進制方式回傳輸出接腳全部的狀態

  • pfio_write_output(data)
  • 將資料一次傳送到輸出接腳,可以一次控制全部接腳 0 或 1
PiFace C 語言函式庫 標頭檔 (.h)原始檔 (.c)

沒有留言:

張貼留言

留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!

發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?

不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !