Arduino 中断和睡眠状态初步尝试_1

提出问题:

一、 为什么我需要中断?

    因为没有中断,你不能让你的Arduino进入睡眠状态,并期望它再次唤醒(一般来说,在有限的情况下,有办法在没有中断的情况下从睡眠中唤醒)。如果你不能入睡,一直工作你的能量很快就会消耗殆尽。睡眠模式消耗的功率非常小,但需要特别设置。你必须知道的第一件事是如何编写代码来利用中断,然后你可以使用更强大的技术。

二、说我不关心功耗。我还需要中断吗?

    是! 即使你不打算让处理器进入睡眠状态,也可能需要中断!如果您有一个与时间相关的应用,如需要每间隔几毫秒发生一次操作,或者需要在发生外部事件后立即发生操作,这是中断就会至关重要。如果你熟悉Arduino编程的基础知识,你可能会想知道为什么你不能只用一个简单的while循环来检查什么时候执行你的动作。简单的while循环是可以按顺序读取每个引脚的状态,但这种方法并不可靠。如果只简单的应用while循环来检查按钮的轮询的话,你的while循环再次检查按钮状态之前,该按钮是否已经被按下并释放?你会错过按钮按下。如果您正在寻找一个非常快速的事件,例如来自传感器的信号,因为害怕错过关键事件,你必须经常进行轮训,从而导致你的程序无法做任何其他事情。但是有了中断,你100

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的用Arduino实现声控灯的程序,利用了Arduino中断功能: ``` const int LED_PIN = 13; // 定义LED连接的引脚 const int SOUND_PIN = 2; // 定义声音传感器连接的引脚 volatile int soundDetected = 0; // 定义一个volatile变量,用于中断处理函数中标志声音是否被检测到 void setup() { pinMode(LED_PIN, OUTPUT); // 将LED引脚设置为输出模式 pinMode(SOUND_PIN, INPUT); // 将声音传感器引脚设置为输入模式 attachInterrupt(digitalPinToInterrupt(SOUND_PIN), soundISR, RISING); // 为声音传感器引脚设置上升沿中断 } void loop() { if (soundDetected == 1) { // 如果检测到声音 digitalWrite(LED_PIN, HIGH); // 将LED引脚电平设置为高电平,点亮LED delay(1000); // 等待1秒 digitalWrite(LED_PIN, LOW); // 将LED引脚电平设置为低电平,熄灭LED soundDetected = 0; // 将标志位重置为0,等待下一次声音检测 } } void soundISR() { // 声音检测中断处理函数 soundDetected = 1; // 标志位设置为1,表示检测到声音 } ``` 程序中首先定义了LED和声音传感器连接的引脚,以及一个volatile变量用于标志声音是否被检测到。在setup函数中,将LED引脚设置为输出模式,声音传感器引脚设置为输入模式,并为声音传感器引脚设置上升沿中断。在loop函数中,如果检测到声音,就点亮LED并等待1秒后熄灭LED,然后将标志位重置为0,等待下一次声音检测。最后,在soundISR函数中,将标志位设置为1,表示检测到声音。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值