写代码的时候敢接每次查wiringPi库函数挺麻烦的,自己wiringPi库封装了一下:

 #ifndef __PICUSTOM_H__
#define __PICUSTOM_H__
/**********************************头文件部分************************************/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>
#include <wiringPi.h> //树莓派GPIO库
#include <wiringSerial.h> //树莓派串口配置
/***********************************变量定义*************************************/
#define BOOLEAN unsigned char
#define INT8U unsigned char
#define INT8S signed char
#define INT16U unsigned short int
#define INT16S signed short int
#define INT32U unsigned int
#define INT32S signed int
/**************************GPIO库函数封装配置基础函数******************************/
/*********wiringPi进行初始化*********/
int wiringPi_init(int mode)
{
int value;
switch(mode){
case :value = wiringPiSetup();break; //具体管脚定义图和管脚映射
case :value = wiringPiSetupGpio();break; //区别在亍假定程序使用的是Broadcom的GPIO管脚定义,而没有重新映射。
case :value = wiringPiSetupPhys();break; //区别在于允讲程序使用物理管脚定义,仅支持P1接口。
case :value = wiringPiSetupSys();break; //不是直接通过操作硬件来实现(见wiringPi手册)。
default : value = ; //模数参数错误
}
return value;
}
/********wiringPi初始化结果********/
void wiringPi_init_errno(int value)
{
int a = ;
if(value)
{
if( == value)printf("wiringPi_init mode 参数选择错误\n");
else fprintf(stderr,"wiringPi_init 初始化失败\n");
}
else fprintf(stderr,"wiringPi_init 初始化成功\n");
}
/*****wiringPi初始化上层调用******/
void wiringPi(int mode,int a)
{
int value = wiringPi_init(mode);
if(a)wiringPi_init_errno(value);
}
/*******GPIO引脚模式设置********/
int GPIO_Pin_init(int pin,int mode,int pud)
{
int a = ;
switch(mode){
case :pinMode(pin,INPUT);break; //初始化输入引脚
case :pinMode(pin,OUTPUT);break; //初始化输出引脚
case :{ //PWM_OUTPUT模式 脉冲输出
if( == pin)pinMode(pin,PWM_OUTPUT);
else a = ; //引脚不支持PWM_OUTPUT模式 脉冲输出
}break;
case :{ //CLOCK 输出模式。(GPIO 时钟)
if( == pin)pinMode(pin,GPIO_CLOCK);
else a = ; //引脚不支持PWM_OUTPUT模式 (GPIO 时钟)
}break;
default : a =; //模式参数错误
}
switch(pud){
case :pullUpDnControl(pin,PUD_OFF);break; //无上拉或下拉电阻
case :pullUpDnControl(pin,PUD_UP);break; //内部上拉至 3.3V
case :pullUpDnControl(pin,PUD_DOWN);break; //内部下拉至地线
default : a = ; //上下拉参数错误
}
return();
}
/********GPIO引脚结果模式设置********/
int GPIO_Pin_init_errno(int value)
{
int a;
switch(value){
case :fprintf(stderr,"GPIO_Pin_init 初始化成功\n");break;
case :fprintf(stderr,"模式参数错误,0输入,1输出\n");break;
case :fprintf(stderr,"引脚不支持PWM_OUTPUT模式 脉冲输出(请尝试1引脚)\n");break;
case :fprintf(stderr,"引脚不支持PWM_OUTPUT模式 (GPIO 时钟)(请尝试7引脚)\n");break;
case :fprintf(stderr,"上下拉参数错误,0无,1上,2下\n");break;
default : a = ;
}
return a;
}
/*****GPIO初始化上层调用******/
void GPIO_init(int pin,int mode,int pud,int a)
{
int value =GPIO_Pin_init(pin,mode,pud);
if(a)GPIO_Pin_init_errno(value);
} /*************pin数据************/
int GPIO_Pin_operation(int pin,int mode,int value)
{
int a;
switch(mode){
case :a = digitalRead(pin);break; //读数据
case :digitalWrite(pin,value);break; //写数据
default : return a = ; //模式参数错误
}
return(a);
}
/********pin状态设置调试********/
int GPIO_Pin_operation_errno(int value)
{
int a;
switch(value){
case :fprintf(stderr,"GPIO_Pin_operation 成功\n");break;
case :fprintf(stderr,"模式参数错误\n");break;
default : a = ;
}
}
/********pin状态设置********/
int GPIO_Pin(int pin,int mode,int pud,int a)
{
usleep();
int value =GPIO_Pin_operation(pin,mode,pud);
if((a==)&(value==))GPIO_Pin_operation_errno(value);
if(value<)return(value);
} /*******************************串口函数部分*************************************/
////////////////////////////////////////////
//函数名: init_serial_port
//功能: 初始哈串口
//输入参数:raw为串口的绝对路径,Baud_Rate 为串口的波特率
//返回值: 打开串口的文件描述符号
//作者邮箱:jikexianfeng@outlook.com
////////////////////////////////////////////
int init_serial_port(const char *raw,int Baud_Rate)
{
return serialOpen(raw,Baud_Rate);
} ////////////////////////////////////////////
//函数名: Serial_data_write_char
//功能: 调用树莓派串口将单个字节写入指定讴备的文件描述符(无内部校验)
//输入参数:fd为串口驱动文件描述符,word 要发送的字符串,
//返回值: 无
//作者邮箱:jikexianfeng@outlook.com
////////////////////////////////////////////
void Serial_data_write_char(int fd,const char word)
{
serialPutchar(fd,word);
}
////////////////////////////////////////////
//函数名: Serial_data_write
//功能: 调用树莓派串口写入字符串(无内部校验)
//输入参数:fd为串口驱动文件描述符,command 要发送的字符串,
//返回值: 写入串口数据的字符长度
//作者邮箱:jikexianfeng@outlook.com
////////////////////////////////////////////
//int Serial_data_write(int fd,const char *command)
int Serial_data_write(const char input[],int fd)
{
int length = ;
do{
Serial_data_write_char(fd,input[length]);
}
while(input[length++]!=0x8e);
return (length);
}
////////////////////////////////////////////
//函数名: Serial_data_read_char_10
//功能: 读取树莓派串口的单个字节(无内部校验)等待10s
//输出参数:fd为串口驱动文件描述符
//返回值: 读取树莓派串口单个字节的数据
//作者邮箱:jikexianfeng@outlook.com
////////////////////////////////////////////
INT8U Serial_data_read_char_10(int fd)
{
return (INT8U)serialGetchar(fd);
}
////////////////////////////////////////////
//函数名: Serial_data_read_char_0
//功能: 读取树莓派串口的单个字节(无内部校验)无等待
//输出参数:fd为串口驱动文件描述符
//返回值: 读取树莓派串口单个字节的数据
//作者邮箱:jikexianfeng@outlook.com
////////////////////////////////////////////
INT8U Serial_data_read_char_0(int fd)
{
return (INT8U)serialDataAvail(fd);
}
////////////////////////////////////////////
//函数名: Serial_data_read
//功能: 调用树莓派串口读取字符串(无内部校验)
//输出参数:Answer[]储存从串口读取的数据,fd为串口驱动文件描述符
//返回值: 读取串口数据的字符长度
//作者邮箱:jikexianfeng@outlook.com
////////////////////////////////////////////
int Serial_data_read(unsigned char output[],int fd)
{
int length = ;
memset(output,,sizeof(output));
do{
output[length++] = Serial_data_read_char_10(fd);
}while(length < (+output[]*+output[]-));
return length;
} #endif

树莓派进阶之路 (030) -Picustom.h(原创)的更多相关文章

  1. 树莓派进阶之路 (029) - 语音识别模块 LD3320(原创)

    近几天听朋友有说到LD3320 语音模块,刚好身边有块树莓派3,就在某宝上买了块自带mcu的LD3320 . 准备: 树莓派一个(配置了wiringPi开发环境的详情见本人博客:树莓派进阶之路 (00 ...

  2. 树莓派进阶之路 (009) - 树莓派ftp脚本(原创)

    FTP.sh #!/bin/sh cd echo "彻底卸载原有的ftp" sudo apt-get remove --purge vsftpd #(--purge 选项表示彻底删 ...

  3. 树莓派进阶之路 (005) - 树莓派Zsh安装脚本(原创)

    zsh.sh #!/bin/bash cd #安装zsh sudo apt-get install zsh #查看zsh cat /etc/shells #更改zsh chsh -s /bin/zsh ...

  4. 树莓派进阶之路 (007) - 树莓派安装cmake3.5 脚本(原创)

    cmake3.5安装脚本: #!/bin/bash cd echo "安装make" sudo apt-get install make echo "安装cmake&qu ...

  5. 树莓派进阶之路 (025) - ubuntu下使用VNC连接树莓派raspberry(转)

    转载:http://www.embbnux.com/2014/03/24/on_ubuntu_use_vnc_connect_raspberry/ ‎ 参考:  http://elinux.org/R ...

  6. 树莓派进阶之路 (020) - 基于24位AD转换模块HX711的重量称量实验

    参考文档:http://www.geek-workshop.com/thread-2315-1-1.html 参考文档:https://wenku.baidu.com/view/e5d5e4e2652 ...

  7. 树莓派进阶之路 (016) - 通过595驱动4位LED显示系统时间

    模块图片,4位共阳极数码管. 我们使用树莓派wiringPi的库来通过74HC595驱动4位数码管: C 代码如下: #include <wiringPi.h> #include < ...

  8. 树莓派进阶之路 (015) - 树莓派使用DS18B20模块测量温度

    参考:http://shumeipai.nxez.com/2013/10/03/raspberry-pi-temperature-sensor-monitors.html 第一步,允许单总线接口 su ...

  9. 树莓派进阶之路 (013) - 树莓派2/3 C语言使用PWM

    我手里面的是树莓派3,系统是Raspbian官方操作系统,已经安装好了wiringPi.        PWM简介:脉宽调制(PWM)是指用微处理器的数字输出来对模拟电路进行控制,是一种对模拟信号电平 ...

随机推荐

  1. Android -- isInEditMode

    解释 Indicates whether this View is currently in edit mode. A View is usually in edit mode when displa ...

  2. sql-获取指定年份指定月份的天数

    declare @年月 varchar(6) set @年月= '201803' --查询2015年2月有多少天 select day(dateadd(month,1,@年月+ '01 ')-1)

  3. 面试题04_替换空格_剑指Offer系列

    题目描写叙述 请实现一个函数,将一个字符串中的空格替换成"%20". 比如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 解题思路 ...

  4. 编程实战——电影管理器之利用MediaInfo获取高清视频文件的相关信息

    随着高速(20M)宽带.HTPC.大容量硬盘(3T)的普及,下载高清片并利用大屏幕观看也成为普通的事情. 随着下载影片的增多,管理就有了问题,有时在茫茫文件夹下找寻一个影片也是一件费时费力的事. 于是 ...

  5. jquery 和 FormData 最简单图片异步上传

    <script src="/scripts/jquery/jquery-3.1.1.min.js"></script> <script type=&q ...

  6. C/C++中的值传递,引用传递,指针传递,指针引用传递

    在面试过程中,被面试官问到传值和传引用的区别,之前没有关注过这个问题,今天在网上找了一篇包含代码和图片的讲解文章,浅显易懂,遂转载备忘. 1. 值传递 void f( int p){ printf(& ...

  7. UBUNTU 字符界面来回切换

    图形界面切换到字符界面: 实体机:Ctrl + Alt + F1 VMware虚拟机:按下ALT+CTRL+SPACE(空格),ALT+CTRL不松开,再按F1.这样就可以切换到字符界面 字符界面切换 ...

  8. python unittest case运行失败重试

    因为使用unittest进行管理case的运行.有时case因为偶然因素,会随机的失败.通过重试机制能够补充保持case的稳定性.查阅资料后发现,python的unittest自身无失败重试机制,可以 ...

  9. Data De-duplication

    偶尔看到data deduplication的博客,还挺有意思,记录之 http://blog.csdn.net/liuben/article/details/5829083?reload http: ...

  10. Atlas:ERROR 1105 (HY000): #07000Proxy Warning - IP Forbidden

    1:遇到一个奇怪的问题 Atlas的管理接口正常 添加一个client之后save config mysql -uroot -p -P1234 -h127.0.0.1 报错了:ERROR 1105 ( ...