写代码的时候敢接每次查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. 【R】函数-统计函数

  2. EF 数据类型 0xA7 的数据长度或元数据长度无效

    测试方法 TestProject1.SysTest.HtmlAnalysisTest12 引发异常:  System.Data.UpdateException: 更新项时出错.有关详细信息,请参阅“I ...

  3. Java-JUC(十一):线程8锁

    题目: 判断以下8种情况,输出的内容 题目一:一个Number实例对象number,两个非静态同步方法getOne,getTwo,两个线程打印输出(一个线程调用number.getOne,另外一个线程 ...

  4. JavaScript 判断一个对象{}是否为空对象的简单方法

    第一种: function isEmptyObject(obj) { for (var key in obj) { //返回false,不为空对象 return false; } return tru ...

  5. VMware 安装Arch Linux记录

    首先说明一下我的环境. 1.VMware Workstation 10.0.1 build-1379776 2.archlinux-2014.02.01-dual.iso 首先建立虚拟机,其他的不提了 ...

  6. 8个DBA最常用的监控Oracle数据库的常用shell脚本

    本文介绍了8个常用的监控数据shell脚本.首先回顾了一些DBA常用的Unix命令,以及解释了如何通过Unix Cron来定时执行DBA脚本.网上也有好多类似的文章,但基本上都不能正常运行,花点时间重 ...

  7. TFS 之 彻底删除团队项目

    方式一 通过选择“齿轮图标”打开团队项目集合的管理上下文. 打开要删除的团队项目的 上下文菜单. 如果未看到上下文图标 (),则你不是在访问 Visual Studio Online,或不是项目集合管 ...

  8. vs2015使用Apache Cordova用JavaScript来访问本地设备的功能,比如摄像头、加速计

    看到下面这张图就代表着我VS2015 跨平台Moblie开发工具安装成功了. 上周安装成功后本想一睹跨平台开发的乐趣,可是一直找不到合适的入口.这周又来捯饬一下结果发现了一个入口.于是来写一个Hell ...

  9. C# new和初始化

    虽然知道使用new可以创建对象,但一直不是很理解初始化和new等知识的具体. 通过8个问题和需求,了解相关知识. 了解问题和需求 1.new 的三个步骤 2.初始化是什么意思. 3.变量声明后和变量赋 ...

  10. Java 基础【15】 压缩与解压缩

    Java.util.zip 提供用于读写标准 ZIP 和 GZIP 文件格式的类. 还包括使用 DEFLATE 压缩算法(用于 ZIP 和 GZIP 文件格式)对数据进行压缩和解压缩的类. 依赖 Jd ...