【Arduino实验09 外部中断触发报警】
目錄
一、實(shí)驗(yàn)?zāi)康?/p>
二、實(shí)驗(yàn)設(shè)備與環(huán)境
三、實(shí)驗(yàn)重點(diǎn)
四、實(shí)驗(yàn)難點(diǎn)
五、實(shí)驗(yàn)內(nèi)容
5.1實(shí)驗(yàn)任務(wù)
5.2實(shí)驗(yàn)原理
5.3實(shí)驗(yàn)內(nèi)容
5.4實(shí)驗(yàn)結(jié)果
5.5思考題
一、實(shí)驗(yàn)?zāi)康?/h2>
????????(1)熟悉外部中斷函數(shù)、自定義函數(shù)的功能;
????????(2)掌握外部中斷函數(shù)、自定義函數(shù)的使用;
????????(3)編寫紅外觸發(fā)外部中斷報(bào)警程序
????????(4)學(xué)會(huì)中斷函數(shù)的應(yīng)用
二、實(shí)驗(yàn)設(shè)備與環(huán)境
????????Arduino UNO套件、Arduino IDE、計(jì)算機(jī)、蜂鳴器、LED、火焰?zhèn)鞲衅鳌⒄饎?dòng)傳感器、電阻等等
三、實(shí)驗(yàn)重點(diǎn)
????????(1)實(shí)驗(yàn)電路連接;(2)控制程序代碼編寫;(3)程序功能調(diào)試
四、實(shí)驗(yàn)難點(diǎn)
????????(1)程序代碼編寫、調(diào)試
五、實(shí)驗(yàn)內(nèi)容
5.1實(shí)驗(yàn)任務(wù)
????????任務(wù)描述:通過按鍵、傳感器產(chǎn)生一個(gè)觸發(fā)事件,觸發(fā)外部中斷,調(diào)用中斷函數(shù)發(fā)出聲光警報(bào)。
5.2實(shí)驗(yàn)原理
????????1.外部中斷函數(shù)
????????attachInterrupt ()
????????格式:attachInterrupt(interrupt,function,mode)
????????功能:attachInterrupt ()函數(shù)用于在程序運(yùn)行過程中監(jiān)測外部事件的發(fā)生,根據(jù)事件觸發(fā)中斷并進(jìn)行中斷程序處理,實(shí)現(xiàn)實(shí)時(shí)響應(yīng)事件的結(jié)果。當(dāng)觸發(fā)中斷事件,即暫停當(dāng)前執(zhí)行的主程序,轉(zhuǎn)去運(yùn)行中斷程序,中斷程序執(zhí)行完成后,再回到主程序,從之前暫停位置語句后繼續(xù)運(yùn)行。
????????參數(shù):
????????中斷函數(shù)有三個(gè)參數(shù),interrupt-表示中斷源(引腳號(hào))、function-中斷處理函數(shù)、mode-觸發(fā)模式。具體含義如下:
????????中斷處理函數(shù):指定中斷運(yùn)行的處理函數(shù),當(dāng)中斷發(fā)生時(shí)執(zhí)行該子程序,其中參數(shù)為函數(shù)的指針。
????????中斷觸發(fā)模式:
????????LOW-低電平觸發(fā);CHANGE-跳變時(shí)觸發(fā);RISING-上升沿觸發(fā);FALLING-下降沿觸發(fā)。
????????注意:要在主程序的setup()部分配置好中斷函數(shù);中斷函數(shù)沒有形參,也沒有返回值。????????
????????detachInterrupt(interrupt)
????????格式:detachInterrupt(interrupt)
????????功能:中斷分離函數(shù),用于取消中斷函數(shù)
????????參數(shù):interrupt,中斷號(hào)
?????????不同的Arduino型號(hào)上外部中斷的位置也不同,只有外部中斷發(fā)生在以下端口,Arduino才能捕獲到,常見的幾種型號(hào)的外部中斷引腳標(biāo)號(hào)。
//中斷程序示例 int testPin= 2; //中斷號(hào)0,接數(shù)字引腳2 void setup() {......//下降沿觸發(fā)中斷0,調(diào)用中斷處理程序testProgram函數(shù)attachInterrupt(0, testProgram, FALLING);...... } void loop() {......; } void testProgram() { //中斷處理函數(shù)testProgram()...... }????????2.自定義函數(shù)
????????將一個(gè)重復(fù)使用的功能定義為函數(shù),只需要在LOOP主程序里調(diào)用就可以實(shí)現(xiàn)該功能,使程序結(jié)構(gòu)清晰,使程序簡化、編程效率提高。
????????3.震動(dòng)傳感器
????????震動(dòng)傳感器,根據(jù)其結(jié)構(gòu)又分為彈簧開關(guān)和滾珠開關(guān)。彈簧開關(guān),其內(nèi)部由一根中心金屬導(dǎo)電腳和環(huán)繞在其外部的彈簧導(dǎo)電腳組成。彈簧震動(dòng)時(shí)會(huì)接觸到中心導(dǎo)電腳,形成短路閉合狀態(tài)。滾珠開關(guān),其內(nèi)部包含有一顆金屬滾珠,當(dāng)震動(dòng)時(shí)滾珠滾動(dòng)短路兩個(gè)導(dǎo)電腳,形成短路閉合狀態(tài)。
????????4.火焰?zhèn)鞲衅?/p>
????????火焰的熱輻射具有離散光譜的氣體輻射和連續(xù)光譜的固體輻射。不同燃燒物的火焰輻射強(qiáng)度、波長分布有所差異,但總體來說,其對(duì)應(yīng)火焰溫度的近紅外波長域及紫外光域具有很大的輻射強(qiáng)度,根據(jù)這種特性可制成火焰?zhèn)鞲衅鳌;鹧鎮(zhèn)鞲衅骼眉t外線對(duì)火焰非常敏感癿特點(diǎn),使用特制癿紅外線接叐管來檢測火焰,然后把火焰癿亮度轉(zhuǎn)化為高低發(fā)化癿電平信號(hào)。
????????火焰?zhèn)鞲衅鞯亩桃_線未負(fù)極,長引腳線為正極,將火焰?zhèn)鞲衅髋c10K電阻相連,電路連接方式如圖:
5.3實(shí)驗(yàn)內(nèi)容
????????1.外部中斷函數(shù)的使用
????????(1)按鈕事件觸發(fā)外部中斷
????????步驟1:連接電路
????????步驟2:寫源程序
//按鍵觸發(fā)中斷檢測程序 int ledPin = 9; //LED 接數(shù)字引腳 9 int buttonPin = 2; //按鍵接中斷 0,即數(shù)字引腳 2 void setup() {pinMode(ledPin, OUTPUT);pinMode(buttonPin,INPUT_PULLUP); //按鍵設(shè)為輸入模式,內(nèi)部上拉attachInterrupt(0, testProgram, FALLING); //下降沿觸發(fā)中斷 0,調(diào)用 testProgram 函數(shù) } void loop(){ }void testProgram() { //中斷函數(shù) testProgram() for (i=1;i<=10;i++){digitalWrite(ledPin,HIGH);delay(200); digitalWrite(ledPin,LOW);delay(200);} }????????步驟3:程序功能調(diào)試
????????步驟4:改變中斷觸發(fā)模式為LOW、CHANGE、RISING,進(jìn)行中斷觸發(fā)模式測試。
????????(2)震動(dòng)事件觸發(fā)外部中斷
????????將按鈕開關(guān)換成震動(dòng)傳感器,先進(jìn)行震動(dòng)傳感器實(shí)驗(yàn)數(shù)據(jù)測試,再進(jìn)行震動(dòng)觸發(fā)外部中斷事件程序?qū)嶒?yàn)。
????????步驟:......
????????2.火焰?zhèn)鞲衅鲄?shù)測試
????????步驟1:測試電路連接
????????步驟2:程序源代碼(參考)
int SensorLED1 = 7; int SensorLED2 = 8; int SensorINPUT = 2; volatile int state = LOW;void setup(){pinMode(SensorLED1, OUTPUT);pinMode(SensorLED2, OUTPUT);pinMode(SensorINPUT, INPUT_PULLUP); attachInterrupt(0, blink, FALLING); } void loop() {if (state == HIGH) { state = LOW;digitalWrite(SensorLED1, LOW); digitalWrite(SensorLED2, HIGH); delay(500);}else {digitalWrite(SensorLED1, HIGH); digitalWrite(SensorLED2, LOW); } } void blink() { state = !state; }????????步驟3: 程序編譯與調(diào)試
????????3.火焰觸發(fā)外部中斷報(bào)警
????????任務(wù):根據(jù)上一步的火焰?zhèn)鞲衅鳒y試數(shù)據(jù)參考設(shè)置,實(shí)現(xiàn)一個(gè)火焰觸發(fā)中斷報(bào)警裝置,通過火焰觸發(fā)中斷事件,進(jìn)行中斷程序處理。中斷處理程序?qū)崿F(xiàn)火警警燈閃爍效果(紅藍(lán)交替閃爍),同時(shí)響起消防警報(bào)聲(高、低交替聲響)的功能。
????????步驟1:中斷報(bào)警電路連接
????????步驟2:中斷報(bào)警源程序
int beep=8; int flamVal=0; const int sensorPin=A0; int ledPin=7; int ledPin1=8; int buttonPin=2; int buttonPin1=3; void setup() {// put your setup code here, to run once:pinMode(beep,OUTPUT);Serial.begin(9600);pinMode(ledPin,OUTPUT);pinMode(buttonPin,INPUT_PULLUP);attachInterrupt(0,testProgram,FALLING);pinMode(ledPin1,OUTPUT);pinMode(buttonPin,INPUT_PULLUP);attachInterrupt(0,testProgram,FALLING); }void loop() {// put your main code here, to run repeatedly:Serial.begin(9600);flamVal=analogRead(A0);if(flamVal>=200){digitalWrite(beep,HIGH);}else{digitalWrite(beep,LOW);}int sensorValue;sensorValue=analogRead(sensorPin);Serial.print("fire_Value=:");Serial.println(sensorValue);Serial.println(sensorValue,DEC);Serial.println(sensorValue,BIN);Serial.println(sensorValue,HEX);delay(500); } void testProgram(){int i=0;for(i=1;i<=10;i++){digitalWrite(ledPin,HIGH);delay(200);digitalWrite(ledPin,LOW);delay(200);} }????????步驟3:功能調(diào)試
5.4實(shí)驗(yàn)結(jié)果
????????結(jié)論:本次實(shí)驗(yàn)結(jié)果為通過震動(dòng)使其亮燈,然后蜂鳴器響。通過火焰觸發(fā)中斷事件,進(jìn)行中斷程序處理。中斷處理程序?qū)崿F(xiàn)火警警燈閃爍效果(紅藍(lán)交替閃爍),同時(shí)響起消防警報(bào)聲。
????????反思:首先,通過本次實(shí)驗(yàn),我學(xué)到了一些新知識(shí),熟悉了外部中斷函數(shù)、自定義函數(shù)的功能,掌握了外部中斷函數(shù)、自定義函數(shù)的使用,學(xué)會(huì)了中斷函數(shù)的應(yīng)用。其次,本次實(shí)驗(yàn)結(jié)果為通過震動(dòng)使其亮燈,然后蜂鳴器響。通過火焰觸發(fā)中斷事件,進(jìn)行中斷程序處理。中斷處理程序?qū)崿F(xiàn)火警警燈閃爍效果(紅藍(lán)交替閃爍),同時(shí)響起消防警報(bào)聲。最后,在實(shí)驗(yàn)中仍存在一些問題,仍需要繼續(xù)努力。
????????作品:
5.5思考題
1.外部中斷函數(shù)與主程序中函數(shù)的調(diào)用有什么聯(lián)系與區(qū)別?
2.外部事件觸發(fā)中斷函數(shù)可以有哪些場景應(yīng)用?
總結(jié)
以上是生活随笔為你收集整理的【Arduino实验09 外部中断触发报警】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面向对象程序设计,实验一 C++函数程序
- 下一篇: 三相四线相位表查错误接线方法与步骤