我們要結(jié)合“中斷延時(shí)燈”來(lái)學(xué)習(xí)一下米思齊中斷的使用坪创。我們學(xué)習(xí)的思路就是:先來(lái)鞏固一下中斷,再來(lái)學(xué)習(xí)一下延時(shí)燈姐赡,再在延時(shí)燈的基礎(chǔ)上進(jìn)一步學(xué)習(xí)中斷延時(shí)燈莱预。首先來(lái)看一下中斷和延時(shí)燈:
一、中斷
1. 什么是中斷项滑?
打個(gè)比方吧依沮,比如你在家看電視,突然家里電話鈴響了,那么你不得不停下看電視先去接電話危喉,等接完電話后宋渔,你又可以繼續(xù)看電視啦!在整個(gè)過(guò)程中接電話就是一個(gè)中斷過(guò)程辜限,電話鈴響就是中斷的標(biāo)志皇拣,即觸發(fā)中斷的條件。
2.中斷被觸發(fā)的四種條件:
①LOW(低)當(dāng)引腳為低電平時(shí)薄嫡,觸發(fā)中斷氧急。
②CHANGE(改變)當(dāng)引腳電平發(fā)生改變時(shí),觸發(fā)中斷毫深。
③RISING(上升)當(dāng)引腳由低電平變?yōu)楦唠娖綍r(shí)吩坝,觸發(fā)中斷。
④FALLING(下降)當(dāng)引腳由高電平變?yōu)榈碗娖綍r(shí)哑蔫,觸發(fā)中斷钉寝。
3.中斷可以使用的管腳:
Arduino Uno:管腳#2(對(duì)應(yīng)中斷0)和管腳#3(對(duì)應(yīng)中斷1)。
二闸迷、延時(shí)燈
1.制作目標(biāo):
完成一個(gè)日常生活中常用的延時(shí)燈的制作嵌纲,默認(rèn)情況下,燈是滅的腥沽,當(dāng)用戶按下一次按鍵后疹瘦,燈亮,等1秒后再滅巡球。
2.物理連接與元件:
①UNO主控板與DFRduino UNO R3 傳感器IO擴(kuò)展板相連;
②LED發(fā)光模塊:與數(shù)字10端口相連邓嘹;
③按鈕模塊:與數(shù)字2端口相連酣栈;
④導(dǎo)線
3.思路分析:
當(dāng)按鈕被按下時(shí),向2號(hào)管腳輸入高電平汹押,此時(shí)10號(hào)管腳應(yīng)輸出高電平(即按下按鈕矿筝,燈亮);
當(dāng)按鈕被抬起時(shí)棚贾,向2號(hào)管腳輸入低電平窖维,此時(shí)10號(hào)管腳應(yīng)輸出低電平(即抬起按鈕,燈滅)妙痹。
4. 程序編寫:
①這段程序編寫是錯(cuò)誤的铸史,輸入包含兩種狀態(tài),無(wú)法對(duì)應(yīng)輸出的兩種狀態(tài)怯伊。
數(shù)字輸入:支持管腳:0-13琳轿、A0-A5(不用0、1);
兩種狀態(tài):高(按鈕按下)崭篡、低(按鈕抬起)
②這段程序編寫是正確的挪哄。將管腳#2的數(shù)字輸入作為判斷條件,當(dāng)結(jié)果為真時(shí)(即按鈕按下時(shí))琉闪,管腳#10輸出為高電平(即燈亮)并延時(shí)3s后滅迹炼;當(dāng)結(jié)果不為真時(shí)(即按鈕抬起時(shí)),管腳#10輸出為低電平(即燈滅)颠毙。
如果:
上口(向右開)插入判斷條件斯入,結(jié)果有“真”、“假”兩種可能吟秩。
下口(上下開)插入當(dāng)判斷條件為“真”時(shí)執(zhí)行的代碼咱扣,判斷條件的結(jié)果為“假”時(shí),則不執(zhí)行這段代碼涵防。
5. 電路連接
下面我們來(lái)重點(diǎn)分析一下中斷延時(shí)燈的代碼闹伪。
三、延時(shí)燈的改進(jìn)——中斷延時(shí)燈
1.使用按鈕模擬開關(guān)——按下長(zhǎng)亮壮池,再按下一秒后滅
①用中斷方式
②理解中斷的概念
③只有2偏瓤,3管腳可以用
2. 總的代碼分析
上面部分的代碼實(shí)現(xiàn)了按下長(zhǎng)亮的功能。管腳#2實(shí)現(xiàn)了上升沿的中斷椰憋,即按下按鈕時(shí)燈長(zhǎng)亮厅克。并把管腳#10的輸出(即燈亮)設(shè)為下面代碼部分的輸入,實(shí)現(xiàn)中斷功能的回調(diào)橙依。下面部分的代碼實(shí)現(xiàn)了再按下一秒后滅的功能(函數(shù)中是按下按鈕证舟,延時(shí)三秒后,管腳#10輸出變?yōu)榈碗娖剑?/p>
3.分步代碼分析
①初始化模塊
由于直接放在程序構(gòu)建區(qū)的模塊是在loop函數(shù)中循環(huán)運(yùn)行的窗骑,如果我們希望某個(gè)程序模塊只在初始化時(shí)運(yùn)行女责,就需要將對(duì)應(yīng)的模塊放在初始化模塊中。
對(duì)應(yīng)的就是setup函數(shù)创译,包含在模塊中的代碼都會(huì)放在setup 函數(shù)中抵知,不過(guò)由于代碼中本身就包含setup函數(shù),所以這個(gè)操作看起來(lái)沒(méi)有任何效果软族。
②中斷控制模塊
中斷控制模塊生成的代碼分為兩部分刷喜,一部分是在程序主體中完成的一個(gè)函數(shù),如下:
attachInterrupt
(digitalPinTolnterrupt (2)立砸,
attachInterrupt_fun_ 2,RISING);
另一部分是實(shí)現(xiàn)中斷功能的回調(diào)函數(shù)掖疮,如下(包含在中斷控制模塊中的模塊產(chǎn)生的代碼都是放在這個(gè)回調(diào)函數(shù)中):
void attachInterrupt_fun_2()
{
}
③延時(shí)模塊
delay(3000);
④如果執(zhí)行模塊
If(false)
{
}
⑤輸入/輸出模塊
因?yàn)楦叩蛿?shù)值模塊需要和其他模塊配合才能體現(xiàn)出來(lái),所以這里將“輸入/輸出”分類中的前兩個(gè)模塊結(jié)合進(jìn)行代碼對(duì)照颗祝。說(shuō)明:高低模塊中氮墨,“低”對(duì)應(yīng)參數(shù)LOW, “高”對(duì)應(yīng)參數(shù)HIGH纺蛆。
digitalRead(10);
digitalWrite(10,LOW);
4.與Arduino代碼對(duì)照分析
四规揪、實(shí)驗(yàn)結(jié)果與反思
①我們?cè)谠敿?xì)研究代碼后桥氏,準(zhǔn)備進(jìn)行實(shí)驗(yàn),然而米思齊參考課程的資料中顯示的物理元件我們?cè)贏rduino套件中沒(méi)有找到猛铅,然后我們就重新做了做Arduino的中斷實(shí)驗(yàn)字支,基本實(shí)現(xiàn)了中斷延時(shí)燈。
②通過(guò)新陽(yáng)老師的點(diǎn)評(píng)奸忽,我們對(duì)PPT進(jìn)行了修改堕伪,將講解的部分代碼從總的代碼中拆分和標(biāo)記出來(lái),使每一頁(yè)既有總的代碼又有放大的分步代碼栗菜,并對(duì)米思齊代碼和Arduino代碼做了標(biāo)注對(duì)照欠雌,這樣更加清晰明確,是我們?cè)赑PT的制作上的一個(gè)大的收獲疙筹。