我的第一個Arduino

4 我的第一個Arduino

 

相信大家在驅動程式安裝完畢之後呢,一定迫不及待的想要測試,並且開始撰寫你的一個應用程式。

我們這個章節就會很詳細的跟大家說明,怎麼樣去撰寫並且燒錄Arduino應用程式,這個章節柯老師我會寫的非常詳細,以後就會把重點放在程式和設計的技巧說明上。

4.1 麵包板怎麼接?

 

什麼是免焊萬用電路板(solderless breadboard)俗稱麵包板,內部是由一些長條形的磷青銅片組成,水平是由25個插孔組成,而垂直線則是每5個插孔為一組。各插孔間可視需求,以0.6 mm之單心線加以連接組合。

使用方法可以如下圖所表示,最上面的二排 和最下面的二排,它的左右的每一個點,都是彼此連接在一起,其他的部份abcde 五個點,都是上下連接在一起。 如果你有二條線想要連接在一起,只要把它接到連接的二個點上,麵包板底下的電線接頭,就會自動接在一起。

 

 

 

 

4.1.1 麵包板的連接效果

 

 

使用電路板時,應避免將過粗的接線或零件接腳插入電路板插孔。另外,若接線已彎曲,應先用尖嘴鉗將其弄直,才可插入電路板插孔。否則插孔容易鬆弛,而造成電路板接觸不良。建議如果經費允許的話,你再去買個三用電錶,用來測量和除錯是否有接線是否正常。

 

4.2 Arduino 上的第一個程式, LED 閃爍

 

那我們開始撰寫的一個應用程式,因為我們的Arduino 上的硬體已經有個LED 接上pin 13(您可以在看一次圖2-1-1Arduino Uno硬體那一張有說明) ,所以不用任何額外的硬體線路,就可以看到個程式,並且會讓Arduino板子內建的LED 燈有明暗的動作。但是你也你也可以另外用LED 一個接Pin 13 另外一個接Gnd (接地) 也會有同樣的效果,如果你要用LED 接的話,請注意看一下LED 有長短腳的差別,長的那一腳要接到電源的+正極,短的那一角要接到電源的接地,現在的有LED的設計的比較好,所以偷懶的話可以不用再接一個1K電阻,但嚴格來講的話,還是接一個1K電阻比較不會讓LED 燒掉。

 

 

 

4-2-1 LED 的外型

 

硬體接線:

4-2-2 硬體接接圖。

 

 

 

 

等一切硬體都接好之後,透過USB線到電腦上,然後透過檔案總館,剛剛出下載的arduino應用程式打開,便會找到一個叫做arduino.exe,啟動Arduino開始來寫程式吧!! 請打你的Arduino 打開吧。

 

4-2-3點選Arduino.exe 啟動Arduino

過順利打開Arduino 之後,就會看到下圖所示的一個開發工具。Arduino 的官方開發工具的樣子如下,他有不同的OS版本,不管是Windows, MAC 還是Linux 的版本,使用方法與功能都相差不多。

 

 

 

4-2-4 Arduino開發工具的樣子。

 

Arduino 之所以具有可以讓很多人很快的入手,他的優點就是因為在Arduino開發環境下提供了大量的基礎函數,在這些基礎函數涉及I/O控制、時間函數、數學函數、三角函 數等,使用者可以很方便的,透過這些函數進行控制。同時,Arduino開發環境下還 提供了許多的實例程式來使用這些基礎函數,這更加快了使用者的上手速度,這些 實例程式可以在開發環境的下拉式選單File\Examples功能表下找到。

因為大家第一次接觸Arduino ,所以就不要花時間寫程式。我們直接把它的官方應用程式打開吧, 請透過下拉式選單選取 File\Examples\01.Basics\Blink 這是一個讓燈閃 爍的實例:

 

 

 

 

4-2-5 透過下拉式選單File\Examples\01.Basics\Blink 讀取本章節的實例程式。

 

 

 

範例程式:

範例 Ch4-2 Blink.ino (範例程式中sample\ch3\Blink\

 

  1. int ledPin = 13; // 這裡設定所要閃爍的LED燈腳位
  2.  
  3. void setup()
  4. {
  5. pinMode(ledPin, OUTPUT);
  6. }
  7.  
  8. void loop()
  9. {
  10. digitalWrite(ledPin, HIGH); // 設定PIN13腳位為高電位 = 5V
  11. delay(1000); // 設定延遲時間,1000 = 1
  12. digitalWrite(ledPin, LOW); // 設定PIN13腳位為低電位 = 0V
  13. delay(1000); // 設定延遲時間
  14. }

 

 

 

使用長高科技的ADK實驗版的讀者:

請把第1行的接腳 int ledPin = 13; 改為 int ledPin = 54;

 

 

 

接下來請你把Arduino 的硬體,連接上USB 的線,並且與你的電腦相接,接下來我們需要在Arduino 開發軟體上面,需要設定你的硬體,在Arduino 的下拉式選單 Tools\Board\

選取你的板子,如果不請楚的話,可以看Arduino板子的說明書或者包裝盒上的產品說明,大多數的Arduino板子都會有英文字的硬體印刷,如果還真的不確定的話,可以回去看本書的2-2-1Arduino 硬體,看看你的板子比較像是哪一個機型。

 

使用長高科技ADK 的實驗版的讀者:

請選取Arduino Mega 2560

 

 

 

 

 

4-2-6 透過下拉式選單 Tools\Board\來設定板子型號。

 

 

 

設定你的機器型號與MCU & Serial Port,但第一個問題是,我哪知道 Serial Com Port 是接到哪裡?

我們先介紹Windows 的方法,請你把 Windows Device Manager 裝置管理員打開

 

4-2-7 透過Device Manager 調查Ports

 

 

然後你把Ports (COM & LPT) 打開,如果你的硬體已經接上、並且已經安裝好驅動程式,就可以看到。

 

4-2-8 COM PORT 的號碼。

以柯老師的機器,這個Arduino 是用COM 16並且是用Arduino UNO R3 這個板子。

再來選擇你目前的COM設定,如果這一步沒有認設定好的話,會是出現錯誤訊息的。在軟體工具上面找到Tools->Serial Port->COM16(這裡的COM Port依照你所裝上去的USB Serial Port),確認之後打勾就可以了。 因為每個人的電腦多少都有些不同,請選取你的COM port,一般來說作業系統他自己會記住 COM PORT 的號碼,所以設定第一次通常就不用再修改,除非特別例外才需要回來修改一次。

 

4-2-9 指定 COM port

 

 

 

 

 

 

4.3 確認您的程式是否編譯成功Verify

 

 

 

而將寫好的程式碼撰寫在你的Arduino介面裡面之後,接下來要先按下Verify 這個按鈕,程式會先幫忙你檢查語法是否錯誤,如果沒有錯誤,會出現(Done Compiling),因為本章節使用的是,Arduino的官方範例程式,原則上來講應該是不會有錯。

 

 

 

 

4-3-1 確認您的程式是否編譯成功。

4.4 燒錄Upload to I/O Board

接下來我們要編譯並且燒錄程式到arduino 的硬體板子上 ,在這個開發環境中,只需按去上的燒錄按鈕,工具便會自動的編輯程式,如果程式順利編輯成功的話,並會緊接着自動把程式燒錄程式到arduino 的硬體板子上 。好請依照下圖所圈起來的燒錄按鈕按一下,就可以了。

 

 

 

4-4-1 編譯並且燒錄程式到arduino 的硬體板子上。

 

 

等待幾秒鍾,板子上面的RX/TX燈號會連續閃爍,等閃爍之後,軟體工具的下面會出現,類似以下的的訊息:

Atmel AVR ATmega168 is found.

Uploading: flash

Firmware Version: 1.18

Firmware Version: 1.18Check

 

 

 

 

 

這些訊息表示有找到晶片,並且已經上傳上去Arduino,你可以看看LED13燈號是否會每隔一秒閃滅閃滅(硬體板子上有內建LED 13 的燈),你不用作任何硬體的線路處理,就可以直接看到LED,如果你有看到的話,就完成你的第一次使用Arduino了。恭喜你了。

 

 

 

 

如果各位買的arduino 板子,大約在2012年之前的舊的版本,您需要按下 Reset 按鍵,才能來做Upload,目前新版可以不用特定做這一件事情,有些硬體生產的工廠,甚至連此按鈕都直接省掉,沒有個硬體按鍵。

 

 

4-4-2 舊版本的Arduino 燒錄要按下上面的reset 重置按鈕。

 

 

那一般的開發流程是怎麼運作的? 以柯老師為例子:

  1. 先設計硬體線路圖
  2. 撰寫程式
  3. 檢查程式
  4. 上傳到Arduino
  5. 測試、執行
  6. 如果出來的效果有問題,回到步驟一

 

 

4.5 了解 我的第一個Arduino 程式

我們剛剛把Blink 這個程式打開,並且執行順利,這時我們在回頭看看程式。並且了解這個程式到底做什麼,其實呢Arduino 程式,乍看之下跟C語言是非常類似的,並且系統會有兩個很重要的函數等待被呼叫。

 

  1. void setup() // void setup() Arduino啟動時須設定的參數,做初始化的動作,只執行一次
  2. {
  3.  
  4. }
  5. void loop() // 啟動後,會一直執行的loop()loop()執行完畢後,又會再被呼叫loop()
  6. {
  7.  
  8. }

Arduino啟動後,setup()只有剛開始會被呼叫,loop()會一直執行,可以看下面的程式流程圖。

 

 

 

4-4-1 Arduino 程式流程。

 

 

所以你可以想象setup()是一開始就被呼叫,並且做設定的初始化函數,所以如果你想要哪些動作在一開始被呼叫,那就可以把相關的初始化設定的程式且在setup()之內,然後結束後。

arduino系統就會直接執行Loop()函數並且,一遍一遍一次一次不停地執行Loop()函數,意思是Loop()函數執行完畢之後,再次呼叫Loop()函數,整個動作會到用戶關掉電源,才會結束。

 

 

 

 

 

宣告一個ledPin的變數 = 13是怎麼運作的? 你會發現int 設定變數是寫在整個程式的外面,意思就是說成為全域變數。

 

  1. int ledPin = 13;
  2. void setup(){
  3. pinMode(ledPin, OUTPUT);
  4. }

 

然後我們看下初始化setup()這個裡面的函數, pinMode(ledPin, OUTPUT); 設定某Pin腳為OUTPUT模式, 輸出模式,這一個數字的意思是,會指定硬體的接腳13,這個 OUTPUT 的意思是輸出,所以是設定接腳13是做資料輸出的動作。所以一旦你設定此接較為輸出的接腳,那就不能再做修改變成輸入讀取的動作。

 

 

loop() 裡面在做什麼事情?

 

  1. int ledPin = 13;
  2.  
  3. void setup(){
  4. pinMode(ledPin, OUTPUT);
  5. }
  6.  
  7. void loop(){
  8.  
  9. digitalWrite(ledPin, HIGH);
  10. delay(1000);
  11. digitalWrite(ledPin, LOW); // 設定PIN13腳位為低電位 = 0V !!
  12. delay(1000); // 延遲
  13. }

 

程式碼介紹:

9 digitalWrite(ledPin, HIGH); //設定PIN13腳位為高電位 = 5V

10 delay(1000); //設定延遲時間,1000 = 1秒 延遲

11 digitalWrite(ledPin, LOW); //設定PIN13腳位為高電位 = 0V

12 delay(1000); //設定延遲時間,1000 = 1秒 延遲

 

 

這樣在透過Loop() 的迴圈,就會造成LED 的亮1秒,再來LED 的暗1秒,並持續執行這樣的閃爍的動作。並且就像我說的當然如果Loop()函數做完結束之後,Arduino 系統又會再一起呼叫Loop()函數,所以的你常看到LED 燈就一直閃一直閃,閃到沒完沒了,直到你把電源關掉。但是有趣的是只要你又把電源接上的話,那你又會看到LED燈又重新再閃爍,所以意思是說你的程式已經被燒錄到Arduino 板子的Flash記憶體中了,所以不用擔心沒有電程式會不見。

 

 

 

補充資料:

 

如果你要問那輸入的話,要如何撰寫?

 

 

答案:

 

int ledPin = 13;

void setup(){

pinMode(ledPin, INPUT);

}

void loop(){

 

}

 

pinMode(ledPin, INPUT); 設定某Pin腳為INPUT 模式,意思是讀取接腳13的資料。