Arduino教程 外部中斷的使用

2021-08-02 15:23:51 字數 3130 閱讀 6447

1.什麼是中斷?

試想一下,你正在家裡吃飯,這時傳來了敲門聲,雖然你巨餓,雖然面前全是山珍海味,但此時你不得不去開門,同時不得不放停下生命中最重要的事情——吃飯。開啟門後,你發現只是乙個查水表的,你檢查了水表讀數並告訴了查水表的人。關上門,你馬不停蹄的又投入了於食物的作戰中。

我們來分析一下這個頗具傳奇性的故事,在這裡人生的主旋律——吃飯,就是你的主程式,而敲門聲,就是乙個中斷訊號,它讓你不得不去執行你的人生插曲——開門接客這個中斷函式。完成這個小插曲後,你又要投入到主線劇情 吃飯這個主程式上。

現在我想告訴你乙個驚天秘密,其實你媽欺騙了你,你根本不是他們親生的,你是人造人,而你的大腦裡裝備了乙個arduino控制器!你的型號是arduino 吃貨,之所以叫這麼2的名字,是因為你的loop的寫法問題。我們來看看你的loop函式。

[c++] 純文字檢視 複製** ?

**001002

003voidloop()

吃,是的,你沒有看錯,你的人生是如此的幸福,就是不斷的吃();迴圈

但實際上,你還有附加功能開門();

[c++] 純文字檢視 複製** ?

**001002

003004

005006

007void開門()

為了讓你能順利執行開門();動作,你的親生父母還得在setup函式中設定開門();這個動作何時啟動。(也可能是你後媽設定的),具體的方法是attachinterrupt(中斷通道, 中斷函式, 觸發方式);,在這裡中斷通道就是你的耳朵(不要問為什麼不是屁股),觸發開門();這個函式的方式是敲門聲

[c++] 純文字檢視 複製** ?

**001002

003voidsetup()

這樣設定後,你每次聽到敲門聲,就不得不去開啟門,並執行相應的動作了。

也許你對這樣的人物設定不太滿意,但這就是你的宿命,少年。

忘記你蛋碎的屌絲設定吧,我們要開始嚴肅的討論問題了

2.各種型號arduino外部中斷引腳

外部中斷在不同的arduino型號上位置也不同,只有外部中斷發生在以下埠,arduino才能捕獲到,以下例舉了常見的幾種型號的外部中斷引腳標號。

型號int.0

int.1

int.2

int.3

int.4

int.5

uno\ethernet

mega2560

leonardo

due所有io口均可

3.中斷函式,中斷觸發模式與設定中斷

中斷函式就是你要去執行的函式,這個函式不能帶任何引數,且沒有返回型別。如:

[c++] 純文字檢視 複製** ?

**001002

003004

voidhello()

中斷模式就是你的中斷觸發方式。在大多數arduino上有以下四種觸發方式:

low                  低電平觸發

change            電平變化,高電平變低電平、低電平變高電平

rising              上公升沿觸發

falling            下降沿觸發

high                 高電平觸發(該中斷模式僅適用於arduino due)

在定義中斷函式後,要使用外部中斷,你只需要在程式的setup部分配置好中斷函式即可,配置函式如下:

attachinterrupt(interrupt, function, mode);//interrupt為你中斷通道編號,function為中斷函式,mode為中斷觸發模式

需要注意的是在arduino due中,中斷設定有點不同:

attachinterrupt(pin, function, mode);//due 的每個io均可以進行外部中斷,所以這裡第乙個引數為pin,即你使用的引腳編號。

如果在程式中途,你不需要使用外部中斷了,你可以用中斷分離函式detachinterrupt(interrupt );來取消這一中斷設定。

同樣在arduino due上,該函式為detachinterrupt(interrupt );

4.例程

外部中斷的使用也是非常簡單的,下面我們來看乙個官方提供的例程

[c++] 純文字檢視 複製** ?

**001002

003004

005006

007008

009010

011012

013014

015016

017018

intpin = 13;

volatileintstate = low;

voidsetup()

voidloop()

voidblink()//中斷函式

5.應用

利用外部中斷,可以在很多地方提高你程式的執行效率.

Arduino 外部中斷

原文 1.什麼是中斷?試想一下,你正在家裡吃飯,這時傳來了敲門聲,雖然你巨餓,雖然面前全是山珍海味,但此時你不得不去開門,同時不得不放停下生命中最重要的事情 吃飯。開啟門後,你發現只是乙個查水表的,你檢查了水表讀數並告訴了查水表的人。關上門,你馬不停蹄的又投入了於食物的作戰中。我們來分析一下這個頗具...

Arduino 外部中斷

第一篇arduino的日誌嘖嘖。中斷的概念。中斷裝置和中斷處理程式統稱為中斷系統。我們從乙個生活中的例子引入。你正在家中看書,突然 鈴響了,你放下書本,去接 和來 的人交談,然後放下 回來繼續看你的書。這就是生活中的 中斷 的現象,就是正常的工作過程被外部的事件打斷了。在arduino庫中定義,un...

Arduino 輸出隨機數,外部中斷,定時器

函式介紹 random 描述 生成偽隨機數。函式原型 randomseed 描述 初始化隨機數生成器。函式原型 randomseed seed 引數 用於初始化偽隨機序列的數字,隨機數種子。返回值 沒有。int num void setup void loop attachinterrupt 返回值...