2018年6月18日 星期一

Arduino控制指令


一、程式大架構
接下來來認識arduino程式的基本架構。Arduino的程式架構,分為void setup()以及{}void loop(){}這兩個區塊,這些區塊的專有名詞叫做”函數”,當你要撰寫arduino的程式時,這兩個東西是不可或缺的東西,也就是當你在撰寫arduino程式時,一定要出現void setup()以及{}void loop(){}這一些東西,而且也只能出現一次!

void setup(){}void loop(){}就是一種函數,void代表函數執行完後不回傳數值(聽不懂沒關係)void後面的setuploop代表該函數的名字(聽不懂沒關係),但一定要在函數名字後面加一組小括弧和一組大括弧,並把程式寫到大括弧內

setup函數的大括號裡面要放置什麼呢? set up就是建立的意思,顧名思義,裡面就是要放一些有關剛開始建立程式所需的東西,像是設定參數、接腳設定、函數初始化等等,或者你只想要他做一次的程式都可以放在setup函數裡。
Loop就是循環的意思,就是要在裡面就是要放需要arduino一直做的程式,例如說一直偵測溫度、讓LED不停地閃爍等等……


二、基本指令
        1.digitalWrite
        語法:digitalWrite(腳位編號,輸出準位);
腳位:範圍從0~13A0~A7都可以(不過盡量不要用到0,1,A6,A7)因為0,1Arduino專用來通訊的腳位,若真的需要使用,要先拔除插在0,1腳上的接腳,等Arduino程式上傳完畢後再插上去;而不用A6,A7是因為Arduino開發版並沒有將這兩個腳位拉接口出來
輸出準位:”HIGH””LOW”兩種選擇,HIGH代表輸出5V;而LOW代表輸出0V,但可以用10代替HIGHLOW
        例如:
(1)要使第13腳輸出5VdigitalWrite(13,1); digitalWrite(13,HIGH);
(2)要使第A2腳輸出0VdigitalWrite(A2,0); digitalWrite(A2,LOW);
                                           digitalWrite(14,0); digitalWrite(14,LOW);
                                           A0也是第14腳,A1是第15……

到後面編譯時,會利用#defineA0換置為14,所以要寫A014都沒關係


        2.pinMode
        語法:pinMode(腳位編號,工作模式);
        腳位:範圍從0~13A0~A7都可以(不過盡量不要用到0,1,A6,A7)
工作模式:”OUTPUT””INPUT”,若設為” INPUT”代表此接腳將用來偵測電壓;反之設為” OUTPUT”,則此接腳將用來輸出電壓
        例如:
(1)A5設定為偵測輸入電壓:pinMode(A5,INPUT);
                                 (2)9設為輸出電壓:pinMode(9,OUTPUT);


若沒有設定pinModeDDRX暫存器會把三態閘控制在高阻抗狀態,即使PORTX暫存器(digitalWrite)有輸出,也會因為三態閘內部阻抗串聯電路造成輸出電流變小,因此沒宣告pinMode,該接腳照常動作但輸出電流不足





        3.delay
        Arduino將會保持現態,發呆且什麼都不做,直到計時時間到
        語法:delay(毫秒數);
        毫秒數:若需要延遲一秒,一秒=1000毫秒
        例如:需要延遲3秒                                         delay(3000);
                 需要延遲1.8秒                                                     delay(1800);



但撰寫龐大程式時,儘量利用millis()代替delay(),這樣方便模擬多工且能達到計時效果


4.//註解
在程式中,難免複雜難以理解,在程式的最後面加入兩撇斜線或者以/*     */這兩個符號夾著註解內容,如:
        (1)digitalWrite(13,1);                                                  //13腳輸出5V
        (2)pinMode(13,OUTPUT);                                 /*13腳設為輸出腳*/







注意
1.Arduino程式指令會區分大小寫所以pinmode不等於pinModeinput不等於INPUT


2.除了{}之外以及少數例外,幾乎每一行指令敘述都要加
反正除了void setup(){}void loop(){}的結尾不用加以外,給他加下去就對了 例如:pinMode(13,OUTPUT);


3. Arduino有保持性,也就是說若使Arduino輸出5V電壓讓LED亮,若沒有用程式使該接腳輸出0Varduion會一直輸出5V電壓,所以LED會一直亮著,直到下一次指定該腳位輸出0VLED方才熄滅


4.請不要將中文的標點符號和英文的標點符號搞混,因為中文的標點符號Arduino看不懂阿





學會上的指令,使用arduino來讓LED閃爍吧!
由於arduino執行一行程式的速度非常快,如果用arduino來讓LED
而沒有延遲的話,LED會閃一下就滅了,而且速度快到不要不要的。因此要使arduino點亮LED後暫停一下,才看的到LED閃爍
       
       



       
因為要重複→使LED亮→延遲一秒→使LED暗→延遲一秒的動作,所以這些程式要放在loop裡面;至於 設定(或者是宣告)接腳模式 是屬於設定的一種,而且也只需要做一次,因此要放在setup裡。


所以將arduino ide打開,並鍵入以下程式:
void setup()
{
pinMode(13,OUTPUT);
}
void loop()
{
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(1000);
}

                        將程式上傳後應該就可以看到LED在閃爍了



沒有留言:

張貼留言