Arduino1:中断知识点汇总
2015-10-03 16:53
573 查看
[code]code: int pbIn=0; int ledout=A0; volatile int state=LOW; void setup() { pinMode(ledout,OUTPUT); attachInterrupt(pbIn,stateChange,CHANGE);//监视中断输入引脚变化 } void loop() { for(int i=0;i<100;i++) { delay(10); } }//模拟长时间的中断 void stateChange() { state=!state; digitalWrite(ledout,state); }
中断命令语法介绍
attachInterrupt(interrupt, function, mode)
interrupt:中断引脚数
function:中断发生时调用的函数,此函数必须不带参数和不返回任何值。该函数有时被称为中断服务程序。eg:stateChange~
mode:定义何时发生中断以下四个contstants预定有效值:
LOW 当引脚为低电平时,触发中断
CHANGE 当引脚电平发生改变时,触发中断
RISING 当引脚由低电平变为高电平时,触发中断
FALLING 当引脚由高电平变为低电平时,触发中断.
注意事项:
1、当中断函数发生时,delya()和millis()的数值将不会继续变化。当中断发生时,串口收到的数据可能会丢失。你应该声明一个变量来在未发生中断时储存变量。
code: void loop() { val=digitalRead(BUTTON); if((val==HIGH)&&(old_val==LOW)) { state=1-state; startTime=millis(); delay(10); } if((val==HIGH)&&(old_val==HIGH)) { if(state==1&&(millis()-startTime)>500) { brightness++; delay(10);//了解millis()的用法。
2、中断可以再任何时候通过attachInterrupt()命令进行改变。当重新使用attachInterrupt()时,先前分配的中断就会从对应引脚上移除。
3、Arduino也可以忽略所有中断。如果你需要在一段代码中不执行中断,只需要执行 noInterrupts()命令。当这段代码执行完以后,你可以使用 interrupts()命令重新启用中断。
4、 终端也可以通过detachInterrupt(interrupt_number)命令进行删除
相关文章推荐
- [UI]抽屉菜单DrawerLayout分析(二)
- [UI]抽屉菜单DrawerLayout分析(一)
- ZOJ-3892- Available Computation Sequence
- iOS_UIAlertController
- pat1017Queueing at Bank (25)
- iOS之UI随笔-字典转模型以及双模型的构建
- [Leetcode] - 96 Unique Binary Search Trees
- IOS初学笔记UI--UIView
- JPA主键生成策略
- HDU 1815, POJ 2749 Building roads(2-sat)
- UIScrollView与NSTimer计时器、分页指示器控件的使用
- UICollectionView的使用
- hdu5493 Queue 线段树
- note: please rebuild precompiled header ..... /UIKit-2DYE2I2D1B3GL.pcm 解决方案
- 69. Sqrt(x) (Divide-and-Conquer)
- java gui案例开发
- Longest Consecutive Sequence
- 109. Convert Sorted List to Binary Search Tree (List; Divide-and-Conquer, dfs)
- 108.Convert Sorted Array to Binary Search Tree(Array; Divide-and-Conquer, dfs)
- 条款20:宁以pass-by-reference-to-const替换pass-by-value