




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
wiringPi是一个很棒的树莓派IO控制库,使用C语言开发,提供了丰富的接口:GPIO控制,中断,多线程,等等。java的pi4j项目也是基于wiringPi的,我最近也在看源代码,到时候整理好了会放出来的。下面开始wiringPi之旅吧安安进入wiringPi的()安装包。点击页面的第一个的右边snapshot,安装压缩包然后进入安装包所在 执行以下命令>tarxfzwiringPi- //98bcb20>cd-验证wiringPi的是否安装成功,输入gpio-v,会在终端中输出相关wiringPi的信息。否则安装失败假如你写了一个LEDtest.c的项目,则如下g++-Wall-oLEDtestLEDtest.cpp-C++-Wallgcc-Wall-oLEDtest - Csudo使用如下控制台下命>gpio 也可以查看下面的注意:查看时,将树莓派的USB接口面对自己,这样看才是正确,、,、wiringPiwiringPiAPI在使用wiringPi库时,你需要包含头文件#include<wiringPi.h>。凡是写wiringPi的程序,都包含这个头文件使用wiringPi时,你必须在执行任何操作前初始化树莓派,否则程序不能正常工作可以调用下表函数之一进行初始化,它们都会返回一个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转换的,也就是不能使用模拟量的API,需要增加另外的模intogRead(intpin:引返回:引脚上的模拟模拟量输不能使用模拟量的API,需要增加另外的模voidWrite(intpin,intpin:引value:写入到寄存器的值范围在之间输出一个值到寄存器,控制输出。的18脚)voidpullUpDnControl(intpin,intpud) 引脚电平拉到0v接对一个设置IOINPUT的输入引脚设置树莓派内部的拉电阻达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这个函数返回你的程序执行wiringPiSetup初始化函数(或wiringPiSetupGpio)前时间秒数返回类型是unsignedint,最大可记录大约49天的毫秒时长unsignedintmicros这个函数返回你的程序执行wiringPiSetup初始化函数(或wiringPiSetupGpio)前时间秒数返回类型是unsignedint,最大可记录大约71分钟的时长voiddelay(unsignedint将当前执行流暂停指定的毫秒数。因为Linux本身是多线程的,所以实际暂停时间可长一些。参unsignedint类型,最大延时时间可达49voiddelayMicroseconds(unsignedinthowLong)将执行流暂停定的微秒数(10001毫秒0.001秒)因为Linux本身是多线程的,所以实际暂停时间可能会长一些。参数是unsignedint类型,最大延时时间可达71分钟wiringPi提供了一个中断处理函数,它只是一个函数,并不处理中断。他无需root权限返回值:返回负数则代表失pin:接受中断信号的引edgeType:触发的方的函数会在中断发生时执intwiringPiISR(intpin,intedgeType,voidINT_EDGE_BOTH上下降都会触和51单片机不同的是:这个的中断处理函数会和函数并发执行(同时执行,谁也不耽误谁iiPi最多可以并记录后来的仅仅1个中断如果不止1个,则他们会被忽略,得不到执行。通过1脚检测因为按键按下的下降沿,触发中断,反转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系统下的通Posixthreads线程库接口来支持并发包装一个用PI_THEEAD定义的函数为一个线程,并启动个线程首先你需要通过以下方式创建一个特特殊的函数,这个函中的代码就是在新的线程中将执行的代码。,myTread是自己线程的名字,可自定义name:被包装的线程执行函PI_THREAD返回:状态码。返回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每一个数字就代表一把锁源代码voidpiLock(int{}piUnlock(intkeyNum:0-3的值,每一个值代表一把voidpiUnlock(int{}intpiHiPri(intpriority:优先级指数返回值:0,成-1:,失行加快,但会使这个线程获得相当的时间片。priority是和另一个线程A,主线程设定优先级为1,A线程设定为2,那也代表Amain线程优先级高。凡是涉及到多线程编程就会涉及到线程安全的问题多线程同一个数据需要使用同步锁来保障数据操作正确性和符合预期。当A线程锁上锁S后,其他共用这个锁的竞争线程,只能等到锁被释放,才能继续执行成功执行了Lck函数的线程将拥有这把锁。其他线程想要拥有这把锁必须等到这个线程释放锁,也就是这个线程执行pUnck后。同时要扩展的知识是:voale这个CC中的关键字,它请求编译器不缓存这个变量的数据,而是每次都从内存中读取。特别是在多线程下共享放变量,必须使用vltle关键字才是保险的。树莓派硬件上支持的输出的引脚有限,为了突破这个限制,wiringPi提供了软件实现的输出API。需要包含头文件:#include<soft.h>编译时需要添pthread库-intsoftCreate(intpin,intinitialValue,pin:用来作为软件输出使用一个指定的pin引脚创建一个模拟引initalValue:引脚输出的初始Range:值的范围上建议使用返回:0表示成功输出引脚voidsoftWrite(intpin,intvalue:引脚输出的更新引脚输出的使用时需要包含头文件:#includeintserialOpen(char*device,intdevice:串口的地址在Linux中就是设备 默认一般是"/dv/ttyAMA",我的是这样的。baud:波特打开并初始voidserialClose(intfd:文件描关闭fd关联的串voidserialPutchar(intfd,unsignedcharc)发送一个字节的数据到串voidserialPuts(intfd,char发送一个字符串到串voidserialPrintf(intfd,*message,像使用C语言中的printf一样发送数据到串intserialDataAvail(intfd:文件描获取串口缓存中可用的字节数字节数,-1代表错误intserialGetchar(intfd:文件描返回:到的字从串口一个字节数据返回如果串口缓存中没有可用的数据,则会等待秒,如果10后还有没,返回-voidserialFlush(intfd:文件描刷新,清空串口缓冲中的所有可用的数*size_twrite(intfd,constvoid*buf,size_tcount)fd:文件描buf:需要发送的数据缓存数count:发送buf中的前count个字节数据件#include<unistd.h>当要发送到的数据量过大时,wiringPi建议使用这*size_tread(intfd,void*buf,size_t返回:实际的字符数件#include<unistd.h>当要接收的数据量过大时,wiringPi建议使用这个初次使用树莓派串口编程,需要配置。我开始搞了很久,以为是程序写错了还一直在调试。。。(~ ̄—/*修改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{{ //发送数据0}elseif(isOpenPressed()){ //发送数据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:移位的串行数据引脚,比74HC595SERcPin:移位的时钟引脚。如74HC595的脚LSBFIRST先发送数据的低MSBFIRST先发送数据val:要发送的8位数如常见的uint8_tshiftIn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 日用百货买卖合同
- 2025年泰安普通货运从业资格证模拟考试
- 公司内部沟通平台使用记录表格(电子版)
- 商场多经点位租赁合同
- 饭堂伙食承包合同
- 执行和解协议书范例8篇
- 2025年高中化学新教材同步 必修第一册 第1章 阶段重点突破练(一)
- 小额放贷公司合同范本
- 按揭车转让合同范本
- 液晶聚合物LCP战略市场规划报告
- 大学计算机基础(Windows10+Office2016)PPT完整全套教学课件
- 精素材:描写植物的好词好句好段
- 【高中语文】《登岳阳楼》课件17张+统编版高中语文必修下册
- 华师大版八年级数学下册全册教案
- 四下语文学情分析-2
- 家园合作培养幼儿劳动行为习惯的行动研究
- 中国的能源安全 课件
- 郑州市某路雨水污水改造工程施工组织设计
- 对口升学计算机组装试卷答案
- 期末总结600字四篇
- DCDC中恒定导通时间控制模式COT介绍
评论
0/150
提交评论