写代码的时候敢接每次查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. 判断checkbox选中的个数

    直接看例子吧: shippingAddressList  为一个集合 <c:forEach items="${shippingAddressList }" var=" ...

  2. Netflix推荐系统:从评分预测到消费者法则

    http://in.sdo.com/?p=11 原文链接:Netflix recommendations: beyond the 5 stars (Part 1), (Part 2) 原文作者:Xav ...

  3. 转: Centos安装gcc及g++

    Centos安装gcc及g++   Centos支持yum安装,安装软件一般格式为yum install .......,注意安装时要先成为root用户. 按照这个思路,我想安装过程如下: 安装gcc ...

  4. JSP中利用JSTL标签对日期格式化

    数据库:Mysql 开发语言:JAVA 页面类型:JSP 对Mysql中的日期类型格式化,在JSP中,如何办呢,很多人说在JAVA后台去日期格式化,无奈了,于是找到了比较靠谱的答案 需要先引入JSTL ...

  5. [R]Kick start

  6. php composer工具高速使用教程,超级简单

    php依赖管理工具.用于处理packages或者libraries.基于单个工程project,在project的vender目录下保存,默认永远不会全局安装. 须要php 5.3.2+,安装资源包时 ...

  7. .Net Framework System.Collections 集合类

    本文内容 集合类 性能 最近复习了一下集合,C# 关于集合的类蛮多,但我除了 List 那几个经常用之外,其他的用得还真不多(只在小范围使用),但其实,每个集合类都各有自己适用的场景,功能也很强大.尤 ...

  8. EDA: Event-Driven Architecture事件驱动架构

    EDA: Event-Driven Architecture事件驱动架构 2009-09-24 17:28 5 赞  异步编程      软件架构      EDA事件驱动        SOA的核心 ...

  9. 使用instantclient_11_2 和PL/SQL Developer工具包连接oracle 11g远程数据库(转)

    1,先到Oracle网站下载Instant Client : http://www.oracle.com/technology/global/cn/software/tech/oci/instantc ...

  10. 微信小程序 - 上拉加载更多组件

    详情用例看demo,点击下载示例:loadmore