(十八)树莓派3B+ wiringPi库的使用--外部中断
搞过单片机的同学都知道,一般的单片机都有中断系统和外部中断。通过看树莓派的IC手册和WiringPi-Priority, Interrupts and Threads,可以发现树莓派也是具备的,且WiringPi还给我们通过了操作外部中断的函数。这里就介绍一下外部中断怎么使用。这个也是看WiringPi的文档和例子和自己多次试验测试之后发现的,官方文档和例子并不全面,这个不全面也导致我断断续续的搞了几天才搞出来。关于外部中断可以先看看百度百科的解释。
看WiringPi的文档
在WiringPi-Priority, Interrupts and Threads中介绍的Interrupts
如下:
大致是这么几个意思:
- 树莓派的GPIO端口可以作为外部中断的输入引脚使用,支持边沿触发:
- INT_EDGE_FALLING:下降沿
- INT_EDGE_RISING:上升沿
- INT_EDGE_BOTH: 可上升沿也可以下降沿
- INT_EDGE_SETUP:保持原有的GPIO初始方式
- 2013年1月以后:反对使用
WaisForInterrupate()
函数-您应该使用下面较新的和更容易使用的wiringPiISR()
函数; - 例子可以查看isr.c
通过isr.c和isr-osc.c例子我们可以发现int wiringPiISR (int pin, int edgeType, void (*function)(void))
函数的使用和基本的外部中断编程思路,但是实际按照这个思路来编写是运行部成功的。下面是我测试好的电路和代码:
实验电路
实验代码
#include <wiringPi.h>
#include <stdio.h> #define LED_B 0 // 蓝色LED
#define LED_G 2 // 绿色LED
#define LED_R 3 // 红色LED
// 中断引脚
#define btn_pin 1 // 按钮引脚
// 中断标志位 发生中断就置1
int flag = 0;
// 中断发生就会执行这个函数
void blank(void){flag = 1;
}
int main (void)
{wiringPiSetup();pinMode(LED_R, OUTPUT);pinMode(btn_pin, INPUT);pullUpDnControl (btn_pin, PUD_UP); // 这个很重要,把中断引脚设置成上拉输入,delay(100);wiringPiISR(btn_pin,INT_EDGE_FALLING,&blank);while(1){if(flag == 1){delay(20); // 延时 按键销抖if(flag == 1){flag = 0; // 重置标志位// LED 闪烁digitalWrite(LED_R,HIGH);delay(100);digitalWrite(LED_R,LOW);}}}return 0;
}
这里是使用的引脚是wPi编码的。
关于树莓派按键的操作可以先看看之前的博客:《(九)树莓派3B+ wiringPi库的使用–button按钮操作》,这里也介绍了为什么要按键销抖。
实验效果
(十八)树莓派3B+ wiringPi库的使用--外部中断相关推荐
- (二十四)树莓派3B+ Node.js驱动MPU6050
在之前的博客中写过MPU6050模块. (十四)树莓派3B+ wiringPi库的使用–硬件IIC驱动MPU6050 之前使用的wiringPi和C语言写的,现在使用Node.js操作一下.关于电路连 ...
- 树莓派安装wiringPi库
[好用]树莓派安装wiringPi库 只需要在终端输入: cd / tmp wget https://project_downloads.drogon.net/wiringpi-latest.deb ...
- 树莓派3B wiringPi 控制LED小灯
材料准备 1.树莓派3B 2.LED小灯 3.220欧电阻一个(红红黑黑金) 4.面包板 5.杜邦线公母2条 线缆连接 代码 #include<wiringPi.h>//包含wiringP ...
- 树莓派开发—— wiringPi 库的使用
一.wiringPi 的安装 参考文献: https://www.cnblogs.com/lulipro/p/5992172.html 进入 wiringPi的github (https://git. ...
- STM32F103标准库开发:外部中断(EXTI)实验
STM32F103标准库开发----目录 STM32F103标准库开发----外部中断(EXTI)实验----程序源码 本文章技术信息均出自:STM32F103系列超详细参考手册-中文版 一.外部中断 ...
- 【Python学习系列十八】基于scikit-learn库逻辑回归训练模型(delta比赛代码3)
为了得到一致假设而使假设变得过度严格称为过拟合.避免过拟合是分类器设计中的一个核心任务.通常采用增大数据量和测试样本集的方法对分类器性能进行评价.由于比赛中样本量是一致,目标测试集也是既定,所以我的思 ...
- 【iCore4 双核心板_ARM】例程三十八:DSP MATH库测试
实验现象: 核心代码: int main(void) {/* USER CODE BEGIN 1 */int i,j;int res;float time[2];static int error_fl ...
- 【STM32+cubemx】0007 HAL库开发:外部中断,优先级和中断向量表
这一节我们以外部中断为例子,讲讲中断的优先级和中断向量表的知识. 1)cubemx生成代码 首先还是在cubemx中生成代码,选择器件.设置SYS(调试接口).设置RCC(外部晶振时钟源). 然后设置 ...
- (二十三)树莓派3B+ 驱动蜂鸣器播放《茉莉花》
在上一篇(十二)树莓派3B+ node-rpio库的使用–硬件PWM中已经介绍了树莓派的PWM的使用.这里实际就是在上一个的基础之上的一个应用.需要一些关于简谱和蜂鸣器的基本知识了. 1.简谱相关知识 ...
最新文章
- evnetlet hub
- 利用PCHunter结束各种进程
- 是什么动词_【术语攻略】什么是及物动词?
- 17天17个Python设计模式--目录
- boost::geometry::promote_integral用法的测试程序
- 二叉搜索树(BST树)的简单实现
- winform中与asp.net中的 TreeView节点处理对比
- 城市智能升级 算法、算力、数据、行业智慧不可缺
- java画一个小车_小轿车简笔画怎么画
- 会声会影2022语音转文字功能怎么用
- 栅栏密码加密/解密【传统型】在线工具
- canvas基础学习笔记
- python写excel,请大表哥喝杯茶
- CF1219G Harvester 题解
- Frenet坐标系与Cartesian坐标系互转(一):公式推导
- eulerOS 欧拉OS 审计修复日记
- Arduino Uno 火焰传感器实验
- 电力电子应用技术_迎接电能系统新时代挑战的电力电子技术
- 全方位掌握OpenStack技术知识
- EasyNVR实现海康、大华NVR硬盘录像机Web无插件播放方案(支持取特定时间段视频流)
热门文章
- gulp:提示:Error: watching html/*: watch task has to be a function (optionally generated by using gulp
- 安装群晖系统入门图文教程
- java.lang.IncompatibleClassChangeError 常见错误
- 身价过亿的妖媚子对小码农说串口能传送我的爱吗?
- 解决谷歌的but your computer or network may be sending automated queries
- 【香水】区分迪奥小姐Miss Dior中样式相似的几款香水
- 用计算机打根号怎么打,根号在电脑上怎么打出来啊?
- 物理内存占用多少正常
- Python处理CSV文件(二)
- 新手必需知道的查看Windows系统是否被重启的方法