網頁最後修改時間: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: 0xffpi@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
沒有留言:
張貼留言
留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!
發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?
不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !