极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 迷你强

Arduino入门教程--第十九课--Arduino中断的使用

  [复制链接]
发表于 2013-2-22 21:05:17 | 显示全部楼层
中断很有用啊,资料收下,谢谢了
回复 支持 反对

使用道具 举报

发表于 2013-3-5 11:11:04 | 显示全部楼层
交作业
  1. int i=0;
  2. void setup(){
  3.   pinMode(2, INPUT_PULLUP); //设置引脚为上拉输入模式
  4.   pinMode(11,OUTPUT);       //LED控制脚
  5.   attachInterrupt(0,bt,FALLING);  //按钮切换LED状态
  6. }

  7. void loop(){
  8.   digitalWrite(11,i);
  9. }
  10. void bt(){  
  11.   i=!i;
  12.   delay(2000);
  13. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-3-10 23:37:28 | 显示全部楼层
弘毅 发表于 2012-10-29 13:00
额。。。闸刀开关在接触的那一瞬间,应该也是有抖动的。。不过闸刀一般是大功率地方用吧。。那点抖动可 ...

这个例子里头讲的是中断,而你连接的是普通按键读取时做软件消抖,
那中断的按键判断已经被封装了,自己程序中不能再读引脚的值,怎么消逗啊,看下17楼的程序,也是一样
回复 支持 反对

使用道具 举报

发表于 2013-3-11 12:05:51 | 显示全部楼层
wjm251 发表于 2013-3-10 23:37
这个例子里头讲的是中断,而你连接的是普通按键读取时做软件消抖,
那中断的按键判断已经被封装了,自己 ...

硬件消抖,也就是并联电容。
回复 支持 反对

使用道具 举报

发表于 2013-3-11 22:26:33 | 显示全部楼层
弘毅 发表于 2013-3-11 12:05
硬件消抖,也就是并联电容。

只能硬件消抖了? 手里没有电容,不知效果是否好。
我模仿试验教程做了个按钮控制流水灯方向的例子,也有这个问题,代码如下,也不复杂,按钮常不灵。

[pre lang="arduino" line="1" file="button_control_led_seq.ino"]
//按一下按钮,灯就会改变方向

boolean order = false;
int time=130;// 流水灯的间隔时间

void setup ()
{            
        for (int i=4; i<=7; i++)    //4 5 6 7设置为流水灯
        {
                pinMode(i,OUTPUT);
        }  
        attachInterrupt(0, stateChange, FALLING);//D2做中断,电压下降触发,也就是放开按键时
}

void flashPin(int x)
{
        digitalWrite(x,HIGH);
        delay(time);
        digitalWrite(x,LOW);
        delay(time);
}
void loop()
{
        static int currentPin = 7;//最初由7号引脚开始闪
        flashPin(currentPin);
       
        /*
        order为true时减3余4,相当于增1个,7增1返回4,表示4->5->6->7->4
        order为false时减1余4,相当于降1个,4降1返回7,表示7->6->5->4->7
        */
        currentPin = ((currentPin - (order?3:1))%4+4);  
}
//中断处理,触发后反转顺序
void stateChange()
{
        order=!order;
}[/code]
回复 支持 反对

使用道具 举报

发表于 2013-3-27 20:48:36 | 显示全部楼层
看弘毅大哥的帖子真是受益匪浅,程序和贴图都清晰明了,很享受!
回复 支持 反对

使用道具 举报

发表于 2013-4-15 16:58:41 | 显示全部楼层
学一天了。。继续。。
回复 支持 反对

使用道具 举报

发表于 2013-4-16 21:49:41 | 显示全部楼层
第一幅图接线直接把开关短路了吧、、、
回复 支持 反对

使用道具 举报

发表于 2013-5-19 14:41:27 | 显示全部楼层
迷你强 发表于 2012-10-29 10:14
响应速度

为什么第一个实验,小灯在没有按钮触发的情况下会是亮的?好像要有状态变化的信号灯才会变化吧?可是我在代码里面没有看到让小灯变亮的语句。
回复 支持 反对

使用道具 举报

发表于 2013-5-19 15:10:50 | 显示全部楼层
arduino_ykk 发表于 2013-5-19 14:41
为什么第一个实验,小灯在没有按钮触发的情况下会是亮的?好像要有状态变化的信号灯才会变化吧?可是我在 ...

state = digitalRead(pbIn);      //读取微动开关状态

digitalWrite(ledOut, state);    //把读取的状态赋予LED指示灯

这两个语句就是改变灯状态~
回复 支持 反对

使用道具 举报

发表于 2013-5-19 21:28:50 | 显示全部楼层
谢谢,这篇有点抽象了
回复 支持 反对

使用道具 举报

发表于 2013-6-13 17:59:17 | 显示全部楼层
弘毅 发表于 2013-5-19 15:10
state = digitalRead(pbIn);      //读取微动开关状态

digitalWrite(ledOut, state);    //把读取的状 ...

你好,中断分为内部中断和外部中断,这篇只讲了外部中断。我在使用的过程中,并没有发现Arduino有内部中断,没有串口中断和定时中断,导致我有些东西无法实现,请问这该怎么解决呢?
回复 支持 反对

使用道具 举报

发表于 2013-6-13 21:46:05 | 显示全部楼层
天空树 发表于 2013-6-13 17:59
你好,中断分为内部中断和外部中断,这篇只讲了外部中断。我在使用的过程中,并没有发现Arduino有内部中断 ...

内部中断可以直接使用AVR GCC~~~不知道有没有封装后的库~
回复 支持 反对

使用道具 举报

发表于 2013-6-14 17:19:53 | 显示全部楼层
弘毅 发表于 2013-6-13 21:46
内部中断可以直接使用AVR GCC~~~不知道有没有封装后的库~

但愿早一点出封装的库,不然我又得学AVR了。
回复 支持 反对

使用道具 举报

发表于 2013-7-4 20:26:03 | 显示全部楼层
纠正个小错误:

attachInterrupt(pbIn, stateChange, CHANGE);
这句有错,
改成
attachInterrupt(0, stateChange, CHANGE);
才能用。

参考官方语言参考
http://arduino.cc/en/Reference/AttachInterrupt
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 15:40 , Processed in 0.057755 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表