attachInterrupt()函数

2023-11-03

attachInterrupt()函数介绍


  • attachInterrupt()函数是用于为Arduino开发板设置和执行ISR(中断服务程序)用的。
  • ISR(中断服务程序)顾名思义就是中断Arduino当前正在处理的事情而优先去执行中断服务程序。当中断服务程序完成以后,再回来继续执行刚才执行的事情。中断服务程序对监测Arduino输入有很大的用处
  • 中断函数:
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);
  • 参数:
    pin: 中断引脚号
    ISR: 中断服务程序名
    mode:中断模式
  • 中断模式(mode)有以下几种形式:

LOW: 当引脚为低电平时触发中断服务程序
CHANGE: 当引脚电平发生变化时触发中断服务程序
RISING: 当引脚电平由低电平变为高电平时触发中断服务程序
FALLING: 当引脚电平由高电平变为低电平时触发中断服务程序

  • 返回值

  • 注意
    在ISR(中断服务程序)函数中,delay()函数是不工作的,而且millis()函数返回值也不再增长。在ISR(中断服务程序)运行期间Arduino开发板接收到的串口数据也可能丢失。另外ISR函数里所使用的变量应声明为volatile类型。详情请见以下”关于ISR(中断服务程序)”部分。

  • 使用中断

中断很适合执行那些需要不断检查的工作,比如检查一个引脚上连接的按键开关是否被按下。中断更适用于很快就会消失的信号检查,比如某一个引脚用于检测脉冲信号,这个脉冲信号的持续时间可能十分短暂。如果不使用中断,那么假如Arduino开发板正在执行其它任务时,突然这个脉冲信号来了,还不等Arduino开发板完成正在执行的工作,这个脉冲信号可能就已经消失了。而使用中断,就可以确保这个转瞬即逝的脉冲信号可以很好的被Arduino开发板检测到并执行相应任务。

  • 支持中断的引脚
    在这里插入图片描述

  • 关于ISR(中断服务程序)
    对于Arduino开发板来说,ISR(中断服务程序)是一种特殊的函数。它的特殊意味着它具有其它类型函数所不具备的限制和特点。

  • ISR函数不能有任何参数。ISR也没有任何返回值。

    通常ISR需要越短小精悍越好!另外如果您的代码中有多个ISR函数,那么每次Arduino只能运行一个ISR函数,其它ISR函数只有在当前的ISR函数执行结束以后,才能按照其优先级别顺序执行。

millis()函数的运行依赖Arduino开发板的中断功能,因此ISR函数中的millis()函数是无法正常运行的。micros() 也是类似的情况,它只能在初始的1-2毫秒中可以运行,但是过了这1-2毫秒后就开始出现问题了。 delayMicroseconds() 不需要任何计数器就可以运行,所以delayMicroseconds() 运行是不会受到影响的。

一般情况下,ISR函数与主程序之间传递数据是依靠全局变量来实现的。为了确保全局变量在ISR函数中可以正常的工作,应该将可能被ISR函数中使用的全局变量声明为volatile类型。

  • 示例
const byte ledPin = 13;
const byte interruptPin = 2;
volatile byte state = LOW;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}

void loop() {
  digitalWrite(ledPin, state);
}

void blink() {
  state = !state;
}

官方链接:https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

attachInterrupt()函数 的相关文章

  • 数据持久化(Json,二进制,PlayerPrefs)

    数据持久化 文章目录 数据持久化 数据持久化概述 1 数据持久化 JSON 1 Json简介 2 JsonUtility相关知识点 3 LitJson相关知识 4 JsonMgr管理器的书写 2 数据持久化 二进制 1 二进制简介 2 文件
  • Nodejs之Buffer数据转ReadSteam

    当要处理的是一个文件时 stream fs createReadStream content txt 返回一个readStream 文件读取流 输入流 对象 可读流 当处理的是一个Buffer时 用createReadStream就会报错
  • 移动端接口加密

    最近公司写的android接口需要加密 防止被恶意攻击 2加密规则想了个简单的办法 传两个参数 一个是string类型的另一种是MD5加密的密文 在服务端写个拦截器 或者过滤器去拦截他 然后做自己相应的逻辑处理 把string类型的字段拿过
  • 操作系统进程知识概括

    操作系统进程知识概括 进程概述 线程 处理机调度 进程同步 进程互斥 信号量机制 进程互斥同步经典问题 管程 死锁 进程概述 进程概述 程序 是静态的 就是个存放在磁盘里的 可执行文件 就是一系列的指令集合 进程 Process 是动态的
  • OnnxRunTime遇到FAIL : Non-zero status code returned while running BatchNormalization node.

    遇到FAIL Non zero status code returned while running BatchNormalization node 跑onnxruntime时 发现显卡没有用到 pip install onnxruntim
  • Linux中的ssize_t

    2023年7月12日 周三上午 概述 ssize t 是一个数据类型 用于表示有符号的大小 它通常在文件操作和网络编程中用作函数的返回类型或参数类型 头文件 ssize t 在
  • EasyPoi导出 导入(带校验)简单示例 EasyExcel

    官方文档 http doc wupaas com docs easypoi pom的引入
  • 厉害了!知道这样重命名文件都是大佬级别!

    大家好 我是良许 在 Linux 下 重命名一个文件 我们通常是使用 mv 命令 一般是这样操作的 mv file1 txt file2 txt 这样重命令的方式当然是可以 但有个弊端就是你需要输入两次文件名 文件名比较短还好 一旦比较长的
  • zotero 使用方法

    zotero 使用方法总结 前言 zotero 免费开源 功能强大 插件丰富 使用方便 zotero支持多种方式导入文件包括直接拖拽pdf导入文档 DOI arXiv号或从剪切板导入 同时能够使用sci hub 文献下载神器 下载参考文献
  • springboot项目中使用Swagger

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 1 Swagger是啥 Swagger 是一个用于生成 描述和调用 RESTful 接口的 Web 服务 通俗的来讲 Swagger 就是将项目中所有 想要暴露的 接口展现在
  • 【Jmeter】调用java接口进行压测报no cookies问题

    Jmeter 调用java接口进行压测报no cookies问题 问题图片 解决办法 问题图片 解决办法 我的java接口返回参数是json格式 所以要选择如下图所示 最终返回正确的json格式 不在有no cookies问题
  • 线性分类模型(二):logistic回归模型分析

    前言 上一篇文章介绍了线性判别模型 本文介绍线性生成模型 logistic回归模型 本文介绍logstic回归模型相关的知识 为了更好理解模型的决策边界函数 本文同时分析了多元变量的协方差对概率分布的影响 目录 1 logistic回归模型
  • java内存模型

    https www cnblogs com chenpi p 5159558 html
  • 哈希碰撞

    一 什么是哈希碰撞 所谓哈希 hash 就是将不同的输入映射成独一无二的 固定长度的值 又称 哈希值 它是最常见的软件运算之一 如果不同的输入得到了同一个哈希值 就发生了 哈希碰撞 collision 二 哈希碰撞产生原理 举个例子 假设要
  • IDEA更改主题插件——Material Theme UI详解

    原文地址 文章目录 IDEA更改主题插件 Material Theme UI 一 安装 二 设置 1 主设置 1 主题 2 突出颜色 2 高级设置之选项卡 3 高级设置之compact 4 高级设置之图标 icons 关于icons不能使用
  • 导出错误EXP-00091: Exporting questionable statistics

    今天在客户那儿在数据库服务器上导出数据时发生EXP 00091 看看帮助 oracle localhost backup oerr exp 9100091 00000 Exporting questionable statistics Ca
  • Mybatis:了解SqlSessionTemplate

    读完这篇文章 你将会知道 SqlSessionTemplate 和 SqlSessionManager 有什么不同 SqlSessionTemplate 如何实现线程安全 SqlSessionTemplate 怎么和数据库打交道 目录 Sq
  • python 参数**和*用法

    def func 1 kwargs print kwargs def func 2 kwargs print kwargs if name main pilot dqn learn kwargs lr 1e 3 exploration fr
  • Python 反射机制

    对编程语言比较熟悉的朋友 应该知道 反射 这个机制 Python作为一门动态语言 当然不会缺少这一重要功能 然而 在网络上却很少见到有详细或者深刻的剖析论文 下面结合一个web路由的实例来阐述python的反射机制的使用场景和核心本质 一

随机推荐

  • 编码:8421 BCD码(彻底弄懂+6是什么意思,为什么要加6)

    一 解释一下什么是8421 首先要理解的是4bit表示1个十进制位 8421代表的是权值分配 8421码用0000 0001 1001分别表示0 1 2 9的数字 为什么13不是1101 答 不在映射表 8421码的1010 1111没意义
  • 消息中心架构设计

    转载于 https www cnblogs com lilunjia p 8797399 html
  • sql 除以_1.七日留存率-SQL实现

    一 背景 留存率 是用户分析的核心指标之一 它也是经典的AARRR模型 海盗模型 中就有一个重要节点 留存 Acquisition 留存率的计算也是用户分析模型的计算基础 那么如何在数据库中用SQL实现呢 二 什么是留存率 常见的留存率有次
  • GitLab新建删除项目

    新建项目 在主页选择 Create a project 输入Project name 在Project URL选择组或者用户 Visibility Level选择Private 点击 Create project 提示创建成功 点击Clon
  • Vue2项目引入高德地图并展示

    前言 最近项目中需要使用地图来进行展示数据 并且还要进行一些交互的行为 因为之前并没有接触过地图类型的项目 看着原型图感觉还是很不错的 开始开发后也在研究如何在项目中正确引用高德地图 为此也是翻阅了高德官方的文档 发现实现起来还是比较容易的
  • java 蓝桥杯 两道经典国赛 填空题

    目录 求值 题目描述 链接 精选项目课程 IT热门课程 蓝桥云课课程 蓝桥云课 解题思路 源码附上 纯质数 题目描述 解题思路 源码附上 求值 题目描述 链接 精选项目课程 IT热门课程 蓝桥云课课程 蓝桥云课 解题思路 这道题是填空题 所
  • (亲测解决)PyCharm 从目录下导包提示 unresolved reference(完整图解)

    最近在进行一个Flask项目的过程中遇到了unresolved reference 包名 的问题 在网上找了好久解决方案 并没有一个能让我一步到位解决问题的 后来 我对该问题和网上的解决方案进行了分析 发现网上大多数都是针对项目同一目录下的
  • Idea之Java代码Remote JVM Debug

    Idea之Java代码Remote JVM Debug 1 适用场景 在公司中 java代码开发完成之后 一般都会部署到linux服务器上 以供公司客户进行使用 但是作为开发人员 尤其是一名新员工 了解公司产品源代码中的业务逻辑算的上是最重
  • Vue项目element-ui弹窗组件el-dialog、el-drawer,阻止点击遮罩层关闭

    项目需求问题 Vue项目element ui弹窗组件el dialog el drawer 阻止点击遮罩层关闭 Vue项目element ui弹窗组件el dialog el drawer 阻止点击遮罩层关闭 在使用element ui组件
  • 在 VMware Workstation 16 Pro 中安装 Ubuntu Server 22.04.1 并配置静态 IP 地址

    文章目录 1 下载 Ubuntu Server 22 04 1 2 新建虚拟机向导 3 编辑虚拟机设置 4 开启此虚拟机并配置Ubuntu系统 5 设置 root 用户的密码 6 允许远程连接 root 用户 7 配置静态 IP 地址 7
  • CVE-2021-41773 漏洞复现

    漏洞原理 Apache HTTP Server 2 4 49版本使用的ap normalize path函数在对路径参数进行规范化时会先进行url解码 然后判断是否存在 的路径穿越符 当检测到路径中存在 字符时 如果紧跟的2个字符是十六进制
  • PyCharm 集成PyQt5

    PyCharm 安装PyQt5 在Pycharm中安装软件时比较方便的 直接进行File gt Settings 接着进入Project gt Project Interpreter 然后点击右上角的加号 在检索文本框中输入PyQt5 和
  • 【5G消息产业图谱】正式发布!

    5G消息 在所有5G应用中脱颖而出 艳惊四座 那么 作为最快落地的5G应用 5G消息目前的进展如何 到底有多少玩家参与 实际又有多少行业用户在 试水 今天 5G产业圈特别制作的 5G消息产业图谱 正式发布 大家从我们的图谱中可以看到5G消息
  • 网络原理之初识

    目录 网络发展背景 独立模式 网络互联 局域网 广域网 网络通信基础 IP地址 端口号 协议 协议分层 OSI七层网络模型 TCP IP五层 四层 网络模型 物理层 数据链路层 网络层 传输层 应用层 封装和分用 网络发展背景 独立模式 独
  • Tensorflow 摄像头物体实时识别

    官方源码提供了图片的检测 但是实用性不高 所以对源码进行了修改 使用笔记本自带摄像头或者usb摄像头进行实时检测 第二张是摄像头实时物体识别 参考源 视频 https www youtube com watch v COlbP62 B U
  • 第41步 深度学习图像识别:Efficientnet建模(Tensorflow)

    一 写在前面 1 Efficientnet EfficientNet是Google在2019年提出的一种新的卷积神经网络架构 主要目标是提高模型的效率 即在保持或提高模型性能的同时 尽可能地降低模型的复杂性和计算需求 EfficientNe
  • 如何快速提高个人的计算机水平,如何进一步提高计算机水平

    文章 如何进一步提高计算机水平 周老师 您好 我是一名中学信息技术教师 我现在想进一步提高自己计算机专业方面的知识和能力 不知如何去做 我不是计算机专业毕业的 从事信息技术课程教学已两年 我对简单的Office 2000应用及计算机基本操作
  • 通过添加Access-Control-Allow-Origin首部字段,解决flask跨域问题

    今天在使用swagger测试接口的时候出现无法获取返回的问题 TypeError Origin http 10 8 15 49 18081 is not allowed by Access Control Allow Origin 查看日志
  • 树莓派接多个USB摄像头,使用opencv打开指定的某一个摄像头

    问题描述 在树莓派上使用多个USB摄像头时 如何确定各个摄像头所对应的id 比如 当有两个摄像头时 我尝试一个为cv2 VideoCapture 0 一个为cv2 VideoCapture 1 通过看捕获的图像 可以确定各摄像头的id 但这
  • attachInterrupt()函数

    attachInterrupt 函数介绍 attachInterrupt 函数是用于为Arduino开发板设置和执行ISR 中断服务程序 用的 ISR 中断服务程序 顾名思义就是中断Arduino当前正在处理的事情而优先去执行中断服务程序