




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
wiringPi是一個很棒的樹莓派IO控制庫,使用C語言開發(fā),提供了豐富的接口:GPIO控制,中斷,多線程,等等。java的pi4j項目也是基于wiringPi的,我最近也在看源代碼,到時候整理好了會放出來的。下面開始wiringPi之旅吧安安進入wiringPi的()安裝包。點擊頁面的第一個的右邊snapshot,安裝壓縮包然后進入安裝包所在 執(zhí)行以下命令>tarxfzwiringPi- //98bcb20>cd-驗證wiringPi的是否安裝成功,輸入gpio-v,會在終端中輸出相關(guān)wiringPi的信息。否則安裝失敗假如你寫了一個LEDtest.c的項目,則如下g++-Wall-oLEDtestLEDtest.cpp-C++-Wallgcc-Wall-oLEDtest - Csudo使用如下控制臺下命>gpio 也可以查看下面的注意:查看時,將樹莓派的USB接口面對自己,這樣看才是正確,、,、wiringPiwiringPiAPI在使用wiringPi庫時,你需要包含頭文件#include<wiringPi.h>。凡是寫wiringPi的程序,都包含這個頭文件使用wiringPi時,你必須在執(zhí)行任何操作前初始化樹莓派,否則程序不能正常工作可以調(diào)用下表函數(shù)之一進行初始化,它們都會返回一個int-1表示初始化失敗intwiringPiSetup引腳的編號為0~16不常用,不做/wiringPiSetupSys(void)不常用,不做/pin:配置的引作用:配置引腳的IO模voidpinMode(intpin,intmode:指定引腳的IO模注意只有wiringPi引腳編號下的1腳(BCM腳)支持輸只有wiringPi編號下的7(BCM下的4號)支GPIO_CLOCK輸voiddigitalWrite(intpin,int可取的值:HIGH,LOW分別代表高低電讓對一個已近配置為輸出模式的出指intdigitalRead(intpin:的引返回:引腳上的電平,可以是LOWHIGH之一個引腳的電平值LOWHIGHvoidogWrite(intpin,int模擬量輸樹莓派的引身是不支持AD轉(zhuǎn)換的,也就是不能使用模擬量的API,需要增加另外的模intogRead(intpin:引返回:引腳上的模擬模擬量輸不能使用模擬量的API,需要增加另外的模voidWrite(intpin,intpin:引value:寫入到寄存器的值范圍在之間輸出一個值到寄存器,控制輸出。的18腳)voidpullUpDnControl(intpin,intpud) 引腳電平拉到0v接對一個設(shè)置IOINPUT的輸入引腳設(shè)置樹莓派內(nèi)部的拉電阻達50K歐LED閃爍constintLEDpin=1;intmain(){{if(-{cerr<<"setuperror\n";}for(size_t{}return}輸出控制LED呼吸燈的例子usingnamespaceconstpin voidint{intval=intstep={{step=-step;val=1024;}else{step=-step;val=0;} }return}void{if(-{cerr<<"setuperror\n";} }unsignedintmillis這個函數(shù)返回你的程序執(zhí)行wiringPiSetup初始化函數(shù)(或wiringPiSetupGpio)前時間秒數(shù)返回類型是unsignedint,最大可記錄大約49天的毫秒時長unsignedintmicros這個函數(shù)返回你的程序執(zhí)行wiringPiSetup初始化函數(shù)(或wiringPiSetupGpio)前時間秒數(shù)返回類型是unsignedint,最大可記錄大約71分鐘的時長voiddelay(unsignedint將當前執(zhí)行流暫停指定的毫秒數(shù)。因為Linux本身是多線程的,所以實際暫停時間可長一些。參unsignedint類型,最大延時時間可達49voiddelayMicroseconds(unsignedinthowLong)將執(zhí)行流暫停定的微秒數(shù)(10001毫秒0.001秒)因為Linux本身是多線程的,所以實際暫停時間可能會長一些。參數(shù)是unsignedint類型,最大延時時間可達71分鐘wiringPi提供了一個中斷處理函數(shù),它只是一個函數(shù),并不處理中斷。他無需root權(quán)限返回值:返回負數(shù)則代表失pin:接受中斷信號的引edgeType:觸發(fā)的方的函數(shù)會在中斷發(fā)生時執(zhí)intwiringPiISR(intpin,intedgeType,voidINT_EDGE_BOTH上下降都會觸和51單片機不同的是:這個的中斷處理函數(shù)會和函數(shù)并發(fā)執(zhí)行(同時執(zhí)行,誰也不耽誤誰iiPi最多可以并記錄后來的僅僅1個中斷如果不止1個,則他們會被忽略,得不到執(zhí)行。通過1腳檢測因為按鍵按下的下降沿,觸發(fā)中斷,反轉(zhuǎn)11控制的usingnamespacestd;voidvoidconstintLEDPin=11;constintButtonPin=int{ {cerr<<"interruptfunctionregisterfailure"<<endl;}return}void{if(-{cerr<<"wiringPisetuperror"<<endl;} 11LEDdigitalWrite(LEDPin,LOW); 1pullUpDnControl(ButtonPin,PUD_UP);1}LEDvoid{ (HIGH==digitalRead(LEDPin))?LOW:HIGH}}wiringPi提供了簡單的Linux系統(tǒng)下的通Posixthreads線程庫接口來支持并發(fā)包裝一個用PI_THEEAD定義的函數(shù)為一個線程,并啟動個線程首先你需要通過以下方式創(chuàng)建一個特特殊的函數(shù),這個函中的代碼就是在新的線程中將執(zhí)行的代碼。,myTread是自己線程的名字,可自定義name:被包裝的線程執(zhí)行函PI_THREAD返回:狀態(tài)碼。返回0表示成功啟{之失敗int}(void*(*fn)(void{pthread_tmyThread定義:#definePI_THREAD(X)void(void(&myThread,NULL,難怪次寫都會警告,因為沒有NULL)}NULL,void*myThread(void{}keyNum:0-3的值,每一個值代表一把使能同步鎖。wiringPi只提供了4把鎖,也就是keyNum只能取0~3的值,認為有這4把鎖就夠了。keyNum:0,1,2,3每一個數(shù)字就代表一把鎖源代碼voidpiLock(int{}piUnlock(intkeyNum:0-3的值,每一個值代表一把voidpiUnlock(int{}intpiHiPri(intpriority:優(yōu)先級指數(shù)返回值:0,成-1:,失行加快,但會使這個線程獲得相當?shù)臅r間片。priority是和另一個線程A,主線程設(shè)定優(yōu)先級為1,A線程設(shè)定為2,那也代表Amain線程優(yōu)先級高。凡是涉及到多線程編程就會涉及到線程安全的問題多線程同一個數(shù)據(jù)需要使用同步鎖來保障數(shù)據(jù)操作正確性和符合預期。當A線程鎖上鎖S后,其他共用這個鎖的競爭線程,只能等到鎖被釋放,才能繼續(xù)執(zhí)行成功執(zhí)行了Lck函數(shù)的線程將擁有這把鎖。其他線程想要擁有這把鎖必須等到這個線程釋放鎖,也就是這個線程執(zhí)行pUnck后。同時要擴展的知識是:voale這個CC中的關(guān)鍵字,它請求編譯器不緩存這個變量的數(shù)據(jù),而是每次都從內(nèi)存中讀取。特別是在多線程下共享放變量,必須使用vltle關(guān)鍵字才是保險的。樹莓派硬件上支持的輸出的引腳有限,為了突破這個限制,wiringPi提供了軟件實現(xiàn)的輸出API。需要包含頭文件:#include<soft.h>編譯時需要添pthread庫-intsoftCreate(intpin,intinitialValue,pin:用來作為軟件輸出使用一個指定的pin引腳創(chuàng)建一個模擬引initalValue:引腳輸出的初始Range:值的范圍上建議使用返回:0表示成功輸出引腳voidsoftWrite(intpin,intvalue:引腳輸出的更新引腳輸出的使用時需要包含頭文件:#includeintserialOpen(char*device,intdevice:串口的地址在Linux中就是設(shè)備 默認一般是"/dv/ttyAMA",我的是這樣的。baud:波特打開并初始voidserialClose(intfd:文件描關(guān)閉fd關(guān)聯(lián)的串voidserialPutchar(intfd,unsignedcharc)發(fā)送一個字節(jié)的數(shù)據(jù)到串voidserialPuts(intfd,char發(fā)送一個字符串到串voidserialPrintf(intfd,*message,像使用C語言中的printf一樣發(fā)送數(shù)據(jù)到串intserialDataAvail(intfd:文件描獲取串口緩存中可用的字節(jié)數(shù)字節(jié)數(shù),-1代表錯誤intserialGetchar(intfd:文件描返回:到的字從串口一個字節(jié)數(shù)據(jù)返回如果串口緩存中沒有可用的數(shù)據(jù),則會等待秒,如果10后還有沒,返回-voidserialFlush(intfd:文件描刷新,清空串口緩沖中的所有可用的數(shù)*size_twrite(intfd,constvoid*buf,size_tcount)fd:文件描buf:需要發(fā)送的數(shù)據(jù)緩存數(shù)count:發(fā)送buf中的前count個字節(jié)數(shù)據(jù)件#include<unistd.h>當要發(fā)送到的數(shù)據(jù)量過大時,wiringPi建議使用這*size_tread(intfd,void*buf,size_t返回:實際的字符數(shù)件#include<unistd.h>當要接收的數(shù)據(jù)量過大時,wiringPi建議使用這個初次使用樹莓派串口編程,需要配置。我開始搞了很久,以為是程序?qū)戝e了還一直在調(diào)試。。。(~ ̄—/*修改cmdline.txt/*修改cmdline.txt>cd>sudovimdwc_otg.lpm_enable=0console=ttyAMA0,115200kgdboc=ttyAMA0,115200console=tty1root=/dev/mmcblk0p2rootfstype=ext4elevator=deadline/*修改inittab>cd>sudovim#T0:23:respawn:/sbin/getty#T0:23:respawn:/sbin/getty-LttyAMA0115200sudoreboot下面是雙機通信的一個例bitisOpenPressed(void);bitisClosePressed(void);voiddelay(unsignedintt);sbitcloseButton=P2^0; bitisOpenPressed(void);bitisClosePressed(void);voiddelay(unsignedintt);sbitcloseButton=P2^0; sbit = //與打開按鍵相連的引void{closeButton= =EA 51{{ //發(fā)送數(shù)據(jù)0}elseif(isOpenPressed()){ //發(fā)送數(shù)據(jù)1}}}bit{bitpress{{;press=}}return}bit{bitpress{{;press=}}return}voiddelay(unsignedint{unsignedint unsignedint unsignedcharj;for(i=t;i>0;i--)for(j=120;j>0;j--;}樹莓派代碼,作為串口通信的接收usingnamespacestd;voidconstintLEDPin=int{intfd;//LinuxIO,fdif((fd=serialOpen("/dev/ttyAMA0",9600))==-{cerr<<"serialopenexit(-}{if(serialDataAvail(fd)>= {intdata= 51{{//closeled}else {//openled}}}return}void{if(-{cerr<<"setuperror"<<endl;}}shiftshift需要包含頭文件#includevoidshiftOut(uint8_tdPin,uint8_tcPin,uint8_torder,uint8_tval)dPin:移位的串行數(shù)據(jù)引腳,比74HC595SERcPin:移位的時鐘引腳。如74HC595的腳LSBFIRST先發(fā)送數(shù)據(jù)的低MSBFIRST先發(fā)送數(shù)據(jù)val:要發(fā)送的8位數(shù)如常見的uint8_tshiftIn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年銅件設(shè)備項目投資價值分析報告
- 2025至2030年玩具禮品車項目投資價值分析報告
- 2025年高檔浸塑防滑衣架項目可行性研究報告
- 2024-2030年中國排版用活字行業(yè)市場深度研究及投資戰(zhàn)略規(guī)劃建議報告
- 四氟乙烷-五氟乙烷可行性研究報告
- 2025年度綠色住宅開發(fā)項目房地產(chǎn)代理合作協(xié)議
- 2025年度車展媒體合作與報道協(xié)議范本
- 2025年印刷品、記錄媒介復制品合作協(xié)議書
- 2025年中國翡翠工藝品行業(yè)發(fā)展?jié)摿Ψ治黾巴顿Y方向研究報告
- 《歸去來兮辭 并序》教學設(shè)計 2023-2024學年統(tǒng)編版高中語文選擇性必修下冊
- 2025年度光伏電站光伏組件回收處理合同示范文本
- 2025年春季少先隊工作計劃及安排表(附:少先隊每月工作安排表)
- 中央2025年公安部部分直屬事業(yè)單位招聘84人筆試歷年參考題庫附帶答案詳解
- 《教育強國建設(shè)規(guī)劃綱要(2024-2035年)》全文
- 體育老師籃球說課
- 浙江省金華市義烏市2024年中考語文二模試卷含答案
- 《真希望你也喜歡自己》房琪-讀書分享
- 2024-2025學年全國中學生天文知識競賽考試題庫(含答案)
- 小學科學湘科版六年級下冊全冊同步練習含答案
- 思維第一:全面提升學習力
- 《鐵路橋梁檢定評估工作規(guī)則》鐵運2004第42號
評論
0/150
提交評論