灭火机器人的程序将使用外部中断的方法。有关Arduino UNO 开发板的外部中断介绍,已在3.1.1 节与3.2.4 节介绍过。按以往教学经验,学习外部中断具有较大的难度,而外部中断是每一种单片机的高级用法,使用得好,则有利于提高程序的运行效率。本节将围绕灭火机器人详细介绍外部中断的学习,以便读者最大限度地掌握相关知识。
Arduino 程序在loop()中是不断地循环的。在程序的运行中,时常需要监控一些事件的发生,比如对某一传感器的返回数据进行解析。使用轮询的方式检测,特别加上有些延时语句的使用,会导致效率比较低,而且随着程序功能的增加,轮询到指定功能时需要等待的时间变长。而使用中断方式检测,可以到达实时检测的效果。
中断程序可以看作是一段独立于主程序之外的程序,当中断触发时,控制器会暂停当前正在运行的主程序,而跳转去运行中断程序,中断程序运行完后,会再回到之前主程序暂停的位置,继续运行主程序,如此便可做到实时响应处理事件的效果。中断程序如图6-6-5 所示。
图6-6-5 中断程序
Arduino UNO 的外部中断见表6-6-1。
表6-6-1 外部中断
注:中断号越低,优先级越高,如int.0 高于int.1。
attachInterrupt (interrupt, function, mode) 函数:(www.daowen.com)
interrupt 表示中断号,UNO 板只能用0 或1,即代表2 号、3 号数字接口;
fuction 表示中断函数名,即用来调用定义的中断函数;
mode 表示中断触发方式。
当中断发生时,delay()函数和millis()的数值将不会继续发生变化。当中断发生时,串口收到的数据可能会丢失,此时需要声明一个变量来在未发生中断时存储变量。如果在程序中途,不需要使用外部中断了,可以用中断分离函数detachInterrupt(interrupt)来取消这一中断设置。
中断允许在后台运行一些重要任务,默认使能中断。禁止中断时部分函数无法工作,通信中接收到的消息也可能会丢失。noInterrupts() 为禁止中断函数,interrupts() 为重启中断函数。
禁止中断、重新启用中断的使用方法如下:
灭火机器人的程序代码如下:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。