树莓派进阶之路 (030) -Picustom.h(原创)
写代码的时候敢接每次查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(原创)的更多相关文章
- 树莓派进阶之路 (029) - 语音识别模块 LD3320(原创)
近几天听朋友有说到LD3320 语音模块,刚好身边有块树莓派3,就在某宝上买了块自带mcu的LD3320 . 准备: 树莓派一个(配置了wiringPi开发环境的详情见本人博客:树莓派进阶之路 (00 ...
- 树莓派进阶之路 (009) - 树莓派ftp脚本(原创)
FTP.sh #!/bin/sh cd echo "彻底卸载原有的ftp" sudo apt-get remove --purge vsftpd #(--purge 选项表示彻底删 ...
- 树莓派进阶之路 (005) - 树莓派Zsh安装脚本(原创)
zsh.sh #!/bin/bash cd #安装zsh sudo apt-get install zsh #查看zsh cat /etc/shells #更改zsh chsh -s /bin/zsh ...
- 树莓派进阶之路 (007) - 树莓派安装cmake3.5 脚本(原创)
cmake3.5安装脚本: #!/bin/bash cd echo "安装make" sudo apt-get install make echo "安装cmake&qu ...
- 树莓派进阶之路 (025) - ubuntu下使用VNC连接树莓派raspberry(转)
转载:http://www.embbnux.com/2014/03/24/on_ubuntu_use_vnc_connect_raspberry/ 参考: http://elinux.org/R ...
- 树莓派进阶之路 (020) - 基于24位AD转换模块HX711的重量称量实验
参考文档:http://www.geek-workshop.com/thread-2315-1-1.html 参考文档:https://wenku.baidu.com/view/e5d5e4e2652 ...
- 树莓派进阶之路 (016) - 通过595驱动4位LED显示系统时间
模块图片,4位共阳极数码管. 我们使用树莓派wiringPi的库来通过74HC595驱动4位数码管: C 代码如下: #include <wiringPi.h> #include < ...
- 树莓派进阶之路 (015) - 树莓派使用DS18B20模块测量温度
参考:http://shumeipai.nxez.com/2013/10/03/raspberry-pi-temperature-sensor-monitors.html 第一步,允许单总线接口 su ...
- 树莓派进阶之路 (013) - 树莓派2/3 C语言使用PWM
我手里面的是树莓派3,系统是Raspbian官方操作系统,已经安装好了wiringPi. PWM简介:脉宽调制(PWM)是指用微处理器的数字输出来对模拟电路进行控制,是一种对模拟信号电平 ...
随机推荐
- SSE,MSE,RMSE,R-square指标讲解
SSE(和方差.误差平方和):The sum of squares due to errorMSE(均方差.方差):Mean squared errorRMSE(均方根.标准差):Root mean ...
- Wifidog的协议梳理
上篇文章结合wifidog的协议,讲解了如何实现wifi认证.这篇文章会详细讲解一下wifidog的协议. wifidog的认证流程图 用户连接WIFI会跳转到以下地址: 1 2 3 4 5 6 7 ...
- 算法基础:删除字符串中出现次数最少的字符(Golang实现)
描写叙述: 实现删除字符串中出现次数最少的字符.若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串. 字符串中其他字符保持原来的顺序. 输入: 字符串仅仅包括小写英文字母, 不考虑非法输入, ...
- 自然语言处理哪家强?【36kr】
语音交互事关未来,国内外已经不少公司在抢蛋糕了,大公司收购.投资.合作不断,就可见一斑.目前,基本上所有的巨头都有涉足. 苹果收购 Siri.Novauris,组建基于神经网络算法的语音识别团队 20 ...
- oracle v$sqlarea 分析SQL语句使用资源情况 确认是否绑定变量
-如何确定系统中是否存在绑定变量的情况:首先创建一个表,用于存放整理过得数据:create table t1 as select sql_text from v$sqlarea;----V$SQLAR ...
- 杂货&&心跳
https://github.com/jsfront/month/blob/master/2016/201605.md https://github.com/abdmob/x2js https://l ...
- flume 集群datanode节点失败导致hdfs写失败(转)
来自:http://www.geedoo.info/dfs-client-block-write-replace-datanode-on-failure-enable.html 这几天由于杭州集群处于 ...
- python操作Excel的几种方式
Python对Excel的读写主要有xlrd.xlwt.xlutils.openpyxl.xlsxwriter几种. 1.xlrd主要是用来读取excel文件 import xlrd workbook ...
- Android学习笔记六:六大布局
六大界面布局方式包括: 线性布局(LinearLayout).帧布局(FrameLayout).表格布局(TableLayout).相对布局(RelativeLayout).绝对布局(Absolute ...
- Uncaught DOMException: Failed to execute 'removeChild' on 'Node': The node ……
解决办法是加一个等待时间即可解决问题: setTimeout(function () { you code }, );