課程目標
- 中斷程序的應用
- arduino的中斷函數
- 中斷程序的實際應用
相關知識
中斷程序: 中斷程序可以看作是一段獨立于主程序之外的程序,當中斷觸發時,控制器會暫停當前正在運行的主程序,而跳轉去運行中斷程序,中斷程序運行完后,會再回到之前主程序暫停的位置,繼續運行主程序。
在程序的運行中,我們時常需要監控一些事件的發生,比如對某一傳感器的返回數據進行解析。隨著程序功能增加,輪詢到指定功能時需要等待的時間變長,效率會很低。而使用中斷方式檢測,可以到達實時檢測的效果。
**Arduino的中斷函數:**外部中斷和定時中斷
外部中斷的定義: 一般由外設發出中斷請求,如:鍵盤中斷、打印機中斷、外部中斷需外部中斷源發出中斷請求才能發中斷。
attach interrupt(interrupt,function,mode)
1)interrupt: 中斷號,UNO只用0,1,即代表D2,D3口
2)function:調用中斷函數,中斷發生時調用的函數
3)mode:中斷觸發模式
low 當針腳輸入為低時,觸發中斷
change 當針腳輸入發生變化時,觸發中斷
rising 當針腳由低變高時,觸發中斷
falling 當針腳由高到低時,觸發中斷
定時中斷的定義: 是指主程序在運行一段程序過后自動進行的中斷服務程序。
常見的定時庫有FlexiTimer2.h和Ms.Timer2.h
void start() 開啟定時中斷
void stop() 關閉定時中斷
#include< MsTimer2.h >
void flash()
{
static boolean cutput=HIGH;
digitalWrite(13,OUTPUT);
OUTPUT=!OUTPUT;
MsTimer2:set(500,flash);
MsTimer2:start();
}
void loop()
{}
使用外部中斷注意:
1.中斷服務程序不能夠有參數和返回值,即void Function name(void){}
2.在中斷函數中delay()函數將不起作用
3.在中斷函數中millis()函數的值不會增加
4.得到的串行數據將會丟失
5.需在中斷函數內部更改的值需聲明為volatile類型
電路搭建
所需材料
ArduinoUNO * 1
震動傳感器模塊 * 1
LED * 1
220Ω電阻 * 1
杜邦線若干
電路連接
程序編寫
練習一:震動監測
不使用中斷的方式實現監測到震動后,LED點亮兩秒后熄滅,再次監測到震動后,再次點亮。
圖形化方式:
直接用條件判斷的方式實現了這個功能
代碼方式:
/* 項目名稱:條件判斷制作震動監測
* 項目時間:2022.03.15
* 項目作者:MRX
*/
const int LedPin = 9;
const int SensorPin = 2;
void setup() {
pinMode(LedPin,OUTPUT);
pinMode(SensorPin,INPUT);
digitalWrite(LedPin,LOW);
}
void loop() {
if(digitalRead(SensorPin) == LOW){
digitalWrite(LedPin,HIGH);
delay(1000);
}
else{
digitalWrite(LedPin,LOW);
}
}
練習二:震動監測
使用中斷方式實現上述功能。
圖形化方式:
代碼方式:
/* 項目名稱:中斷制作震動監測
* 項目時間:2022.03.15
* 項目作者:MRX
*/
const int LedPin = 9;
const int SensorPin = 2;
char state = LOW;
void setup() {
pinMode(LedPin,OUTPUT);
pinMode(SensorPin,INPUT);
attachInterrupt(0, blink, FALLING);
digitalWrite(LedPin,LOW);
}
void loop() {
if (state == HIGH) { // 如果state為HIGH
state = LOW;
digitalWrite(LedPin, HIGH); // 亮燈
delay(500); //延時500ms
}
else {
digitalWrite(LedPin, LOW); // 否則,關燈
}
}
void blink() { //中斷函數blink()
state = !state; //一旦中斷觸發,state狀態反轉
}
-
傳感器
+關注
關注
2552文章
51356瀏覽量
755622 -
led燈
+關注
關注
22文章
1592瀏覽量
108225 -
外部中斷
+關注
關注
1文章
132瀏覽量
15857 -
Arduino
+關注
關注
188文章
6477瀏覽量
187541 -
定時中斷
+關注
關注
0文章
19瀏覽量
8597
發布評論請先 登錄
相關推薦
評論