玩转Mixly – 3、Arduino AVR编程 之 控制
以下內容源自Mixly官方技術文檔:
https://mixly.readthedocs.io/zh_CN/latest/Arduino/AVR/02Control.html
?
控制
控制類別中包括了時間延遲、條件執行、循環執行、獲取運行時間、初始化、Switch執行等 控制模塊中主要執行的內容是對程序結構進行的相應控制。
1.初始化
| 1 2 | pinMode(3, OUTPUT); digitalWrite(3,HIGH); ? |
?
1.1 描述
在Arduino中程序運行時將首先調用 setup()函數。 用于初始化變量、設置針腳的輸出輸入類型、配置串口、引入類庫文件等等。
1.2 范例1
初始化時聲明變量。
| 1 2 3 4 5 6 | volatile int item; void setup(){ item = 0; } void loop(){ } ? |
?
1.3 范例2
在初始化時定義中斷函數。
| 1 2 3 4 5 6 7 8 9 10 | void attachInterrupt_fun_2() { digitalWrite(13,HIGH); } void setup(){ pinMode(2, INPUT); pinMode(13, OUTPUT); attachInterrupt(digitalPinToInterrupt(2),attachInterrupt_fun_2,RISING); } void loop(){ } ? |
?
注意
每次 Arduino 上電或重啟后,setup 函數只運行一次。
2.while 循環
2.1 描述
while循環會無限的循環,直到括號內的判斷語句變為假。 必須要有能改變判斷語句的東西,要不然while循環將永遠不會結束。你可以使用一個傳感器的值,或者一個變量來控制什么時候停止該循環。
2.2 參數
-
滿足條件:為真或為假的一個條件。
2.3 范例
當溫度高于30度時,亮燈,否則滅燈。
| 1 2 3 4 5 6 7 8 9 | void setup(){ pinMode(13, OUTPUT); } void loop(){ while (analogRead(A0)*0.488 > 30) { digitalWrite(13,HIGH); } digitalWrite(13,LOW); } ? |
?
3.延時
| 1 | delay(1000); ? |
?
3.1 描述
使程序暫定設定的時間(單位毫秒)。(一秒等于1000毫秒)。
3.2 參數
-
毫秒:暫停的毫秒數。
3.3 范例
13號引腳燈亮1秒,滅1秒,往復循環。
| 1 2 3 4 5 6 7 8 9 | void setup(){ pinMode(13, OUTPUT); } void loop(){ digitalWrite(13,HIGH); delay(1000); digitalWrite(13,LOW); delay(1000); } ? |
?
注意
雖然創建一個使用delay()的閃爍LED很簡單,并且許多例子將很短的delay用于消除開關抖動。
但delay()確實擁有很多顯著的缺點。在delay函數使用的過程中,讀取傳感器值、計算、引腳操作均無法執行,因此,它所帶來的后果就是使其他大多數活動暫停。大多數熟練的程序員通常避免超過10毫秒的delay(),除非arduino程序非常簡單。
利用定時器,就可以解決這個問題,可以避免由于delay()帶來的CPU暫停,也能很好地實現每隔一定時間執行動作。
4.如果(if)
| 1 2 | if (false) { } ? |
?
4.1 描述
if 語句與比較運算符一起用于檢測某個條件是否達成,如某個傳感器的值是否等于某個值。
4.2 參數
-
條件:比較表達式
4.3 用法
增加條件:如果需要增加條件,可以點開齒輪,然后將左側的“否則如果”或者“否則”模塊拖到右側的“如果”之中。
4.4 范例1
當連接在2號引腳的按鍵按下時,點亮13號引腳的燈。
| 1 2 3 4 5 6 7 8 9 | void setup(){ pinMode(2, INPUT); pinMode(13, OUTPUT); } void loop(){ if (digitalRead(2) == 1) { digitalWrite(13,HIGH); } } ? |
?
如果判斷的條件大于等于1時,可以省略等于判斷,因為只要 該表達式的結果不為0,則為真。
所以,上面的寫法與下面的寫法等效。
| 1 2 3 4 5 6 7 8 9 | void setup(){ pinMode(2, INPUT); pinMode(13, OUTPUT); } void loop(){ if (digitalRead(2)) { digitalWrite(13,HIGH); } } ? |
?
4.5 范例2
當連接在2號引腳的按鍵按下時,點亮13號引腳的燈;當按鍵松開時,燈滅。
?
注意
另外一種進行多種條件分支判斷的語句是switch case語句。
5.如果(switch)
?
5.1 描述
和if語句相同,switch…case通過設定的在不同條件下執行的代碼控制程序的流程。
特別地,switch語句將變量值和case語句中設定的值進行比較。當一個case語句中的設定值與變量值相同時,這條case語句將被執行。
關鍵字break可用于退出switch語句,通常每條case語句都以break結尾。如果沒有break語句,switch語句將會一直執行接下來的語句(一直向下)直到遇見一個break,或者直到switch語句結尾。
5.2 參數
-
var: 用于與下面的case中的標簽進行比較的變量值
-
label: 與變量進行比較的值
5.3 用法
增加case:如果需要增加條件,可以點開齒輪,然后將左側的“case”或者“default”模塊拖到右側的“switch”之中。
5.4 范例
當連接在2號引腳的按鍵按下時,點亮13號引腳的燈,否則13號引腳的燈滅
?
注意
每個switch可以有多個case,但是最多不超過一個default,當不滿足任何一個case時,執行default中的程序。
6.for循環
?
6.1 描述
for循環用于重復執行一段的程序。通常使用一個增量計數器計數并終止循環。
for循環用于重復性的操作非常有效,通常與數組結合起來使用來操作數據、引腳。
6.2 參數
-
變量名:用于記錄for循環次數的變量名。
-
起始值:循環的計數起始值,一般從0開頭,也可以從其他數值開始。
-
終點值:循環的計數終點值。
-
步長:每次循環的步長,一般為1,也可以是其他整數。
6.3 用法
可自行設置循環的變量名稱,并確定循環的開始和終止以及循環方向,最后一個數字可以為負數。
6.4 范例
將連接在3號引腳的燈制作成呼吸燈,每一次亮度變化之間間隔50毫秒
?
注意
for循環中定義的變量有名字,可以用字母i,j,k或單詞red,state等有意義的詞語表示。
7.跳出循環
?
7.1 描述
跳出循環用于終止一段重復的程序,一般使用時作為條件語句的執行部分,當循環中的變量滿足某個條件時,執行跳出循環語句。
跳出循環在處理循環中的特殊情況時十分有用。
7.2 參數
-
操作:可以選擇跳出循環和跳到下一個循環兩種操作,結果不同。
7.3 范例
引腳3上的數字從0到255逐一增加,每一次增加之間間隔50毫秒,當數字增加到150時停止增加
?
注意
注意跳到下一個循環的使用,可以方便的將循環中不需要的步驟跳過。
8.系統運行時間
?
8.1 描述
返回自硬件啟動或重啟以來的時間值。
8.2 返回
自硬件啟動或重啟以來的時間,毫秒數或者微秒數。
8.3 范例
自動換行打印系統運行時間
?
9.MsTimer2 定時器
?
9.1 描述
每隔設置的毫秒數執行相應的程序
9.2 范例
利用定時器控制13號引腳LED每隔1秒亮滅一次。
?
注意
利用定時器可以提高硬件的工作效率。
但在一個程序中只能使用一個MsTimer2定時器,如果要實現多個時間的定時,可以配合變量計數來完成。
10.MsTimer2 定時器啟動
?
10.1 描述
MsTimer2定時器開始計時
11.MsTimer2 定時器停止
?
11.1 描述
MsTimer2定時器停止計時
12.簡單定時器
?
12.1 描述
設置不同的簡單定時器,每隔指定秒數執行相應的程序常用于多任務處理。
12.2 范例
D12,D13分別連接LED燈,每隔200ms,D12引腳LED燈切換亮滅; 每隔300ms,D13引腳LED燈切換亮滅;
?
13.允許中斷
?
13.1 描述
允許輸入/輸出模塊中管腳中斷的運行
13.2 范例
使用按鈕模擬開關,每次按下,LED燈切換亮滅
?
14.禁止中斷
?
14.1 描述
禁止輸入/輸出模塊中管腳中斷的運行
14.2 范例
在允許中斷范例的基礎上,嘗試禁止中斷
?
15.SCoop Task
?
15.1 描述
SCoop模塊用于執行多線程任務,最多支持8個任務。
15.2 范例
利用SCoop,控制13號引腳LED燈以2秒的頻率閃爍,同時控制12號引腳的LED燈以200毫秒的頻率閃爍。
微信關注圖中張十三的博客公眾號,與張十三一起探討更多mixly開發問題:
總結
以上是生活随笔為你收集整理的玩转Mixly – 3、Arduino AVR编程 之 控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 玩转Mixly – 2、Arduino
- 下一篇: 玩转Mixly – 5、Arduino