查看: 635|回复: 1

[未解决] 中断之间会发生冲突?

[复制链接]

该用户从未签到

发表于 2019-9-11 15:51 | 显示全部楼层 |阅读模式
本帖最后由 帕菲菲 于 2019-9-11 15:59 编辑

[mw_shl_code=arduino,true]const byte TOUCHPAD_OUTPUT=3;
const byte TOUCHPAD_INTERRUPT=digitalPinToInterrupt(TOUCHPAD_OUTPUT);
const byte WATER_VCC=5;
void setup() {
  pinMode(TOUCHPAD_OUTPUT,INPUT);
  pinMode(WATER_VCC,OUTPUT);
  attachInterrupt(TOUCHPAD_INTERRUPT,touchpadRising,RISING);
  //attachInterrupt(TOUCHPAD_INTERRUPT,touchpadLow,LOW);
}
void touchpadRising(){
  digitalWrite(WATER_VCC,HIGH);
}
void touchpadLow(){
}
void loop(){
}[/mw_shl_code]
WATER_VCC输出引脚控制一个水泵,TOUCHPAD_OUTPUT输入引脚接收一个触摸板的输入。程序的思路是点击触摸板引起水泵喷水。此代码经测试可以得到预期结果。但是如果加上第8行(即去掉注释符号),无论怎样点击触摸板,水泵都不工作了。这一句将触摸板的低电平事件交给一个空方法处理,逻辑上应该是一行无效的代码,但是为什么会导致水泵无响应?LOW改成FALLING也是一样的结果。我该如何控制手指离开触摸板时停止水泵?
触摸板的输出特性是,未触摸时始终为LOW,触摸时在LOW和HIGH之间不断跳动。Arduino Uno。
  • TA的每日心情
    擦汗
    2019-7-29 00:08
  • 签到天数: 47 天

    [LV.5]常住居民I

    发表于 2019-9-11 16:47 | 显示全部楼层
    同一个中断脚(你这里是D3),只有一个中断入口,模式只能三选一:RISING/FALLING/LOW。

    你把 RISING 绑定一个函数(后台设定为RISING模式),设定为第一个函数
    再把 LOW 绑定另一个函数(后台重设为LOW模式),设定的第二个函数覆盖了第一个

    最终导致模式工作在最后一种,之前设定的模式统统失效;
    响应函数也是最后一个,之前设定的统统被覆盖
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    5分钟带你快速了解新一代开发板:M5STACK
    5分钟带你快速了解新一代
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    【小项目】基于XIAO的逃跑蜘蛛
    【小项目】基于XIAO的逃跑
    项目介绍:蜘蛛会在夜晚保持安静。但是一有光线,蜘蛛就会开始震动,逃离光线。硬件:
    心电传感器实验 ESP32 + AD8232
    心电传感器实验 ESP32 + A
    早前买了心电传感器,一直没机会用起来,疫情期间无聊翻将出来发现买错了,但是心电导
    Stduino IDE stm32 最小系统 小蓝板 驱动继电器(五)
    Stduino IDE stm32 最小系
    弱电控制强电 单片机输出输入的电压在3.3V到5V之间,而生活中常用电器很多是12V、220V
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表