第二章 點亮LED燈(Arduino邊做邊學:從點亮Led到物聯(lián)網(wǎng))

本系列文章為作者原創(chuàng),未經(jīng)作者書面同意,不得轉(zhuǎn)載!

幾乎所有的編程學習都是從“hello,world”程序開始的,這幾乎已經(jīng)成為學習編程的一個傳統(tǒng),既然本系列文章的標題是《Arduino項目實戰(zhàn):從點亮Led到物聯(lián)網(wǎng)》,那么我們還是從點亮Led來開始我們的Arduino項目實戰(zhàn)之旅。

作為本系列的第一個項目,其實實現(xiàn)起來非常的簡單,您幾乎不用設(shè)計任何電路和做任何的連線,甚至都不需要編寫任何代碼,可以直接從Arduino IDE的示例代碼中找到一個例程,然后完成程序的上傳即可。

但本文對于初學者來說非常重要,它會告訴你怎么通過數(shù)據(jù)線連接Arduino電路板、Arduino程序的基本結(jié)構(gòu)、怎么上傳程序到Arduino電路板,還有幾個重要的函數(shù),也許是Arduino中最常用的函數(shù)。所以如果你是一個初學者,請跟著本文完成您的第一個項目。

1 項目介紹

點亮LED燈,并讓LED燈閃動。
在這個項目中,我們先不用自己準備LED燈,我們先使用Arduino UNO電路板上面集成的LED燈,如下圖紅箭頭所示的位置。


UNO-01.jpg

在Arduino系列的電路板上,有不少型號都集成了一個可控制的LED燈,但是它們的引腳PIN并不完全相同,Ardunio Uno, MEGA, ZERO是PIN13,而Ardunio MKR1000是PIN6。本文使用的是UNO電路板,如果您手上的電路板不是UNO,還請確認一下它是否集成有可控LED,然后它的引腳是哪一個。

2 所需元器件

元器件 型號 數(shù)量 備注
主控板 arduino Uno 1
數(shù)據(jù)線 Uno數(shù)據(jù)線 1

3 設(shè)備連接

您只需要將Arduino UNO電路板通過數(shù)據(jù)線跟電腦的USB口連接即可,如下圖所示,數(shù)據(jù)線一端插入UNO電路板的數(shù)據(jù)接口,另一端插入電腦USB接口。


UNO-02.jpg

當UNO電路板跟電腦連接上后,如果您使用的是WIN10操作系統(tǒng),電腦會自動安裝USB轉(zhuǎn)串口驅(qū)動程序。Arduino電路板是通過串口跟電腦進行通信的,目前大部分的電腦都不再配備串口,老式的電腦會有,串口是長這個樣子的:


COM04.jpg

現(xiàn)在的個人電腦一般不會配置串口(如果它不是上個世紀購買的話),所以我們使用USB口跟Arduino電路板進行通信,這時候我們就需要實現(xiàn)USB口跟串口的轉(zhuǎn)換,Arduino電路板上都集成了USB轉(zhuǎn)串口的芯片,我們只需要安裝驅(qū)動即可。如果您的電腦安裝驅(qū)動成功,在電腦的設(shè)備管理(鼠標點擊電腦桌面“我的電腦”-點擊鼠標右鍵-在彈出菜單中選擇“管理”)中會看到USB串行設(shè)備,如下圖所示:


COM 02.png

如果您的電腦沒有自動安裝驅(qū)動,您可能需要手動安裝一下。詳情請見附錄《Arduino電路板USB轉(zhuǎn)串口驅(qū)動安裝方法》鏈接地址

4 程序代碼

前面介紹過,我們的第一個項目并不需要您敲任何代碼,在Arduino IDE的文件菜單---示例---01. Basics---Blink,打開Blink文件,如下圖所示:


程序 01.png

下面是Blink程序的代碼:

/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Blink
*/

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

在上面的程序中,我們發(fā)現(xiàn)其實大部分內(nèi)容都被“ /* ”和“ */ ”包裹,這部分內(nèi)容是程序中的注釋,注釋并不是程序的一部分,在程序編譯時,這部分內(nèi)容會被編譯器忽略,注釋的目的是解釋某一小段或者某一行代碼的功能,便于今后自己或者別人讀到這段代碼時能夠很快的理解。

在Arduino程序中,有兩種形式的注釋:

  • 單行注釋:以 // 開始,直到行末為止;
  • 多行注釋:以 /* 開始,以 */ 終止。

所以我們?nèi)サ羯厦娲a中注釋的部分,程序如下:

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  
  delay(1000);           
  digitalWrite(LED_BUILTIN, LOW); 
  delay(1000);  
}

是不是看起來清爽了許多,不過如果你不熟悉Arduino編程的話,這段代碼看起來就不知所云了,帶注釋的代碼看起來冗余,但我們大體能夠讀明白程序的功能。好吧,下面我們對上面的程序做一個解釋。

4.1 程序結(jié)構(gòu)

Arduino程序結(jié)構(gòu)主要包含兩部分:setup()函數(shù)和loop()函數(shù)。

setup()函數(shù)

Arduino程序啟動時會調(diào)用 setup()函數(shù)。在程序中一般使用它來初始化變量,引腳模式,啟用庫等。setup函數(shù)只能在Arduino電路板每次上電或復(fù)位后運行一次。

loop()函數(shù)

loop() 函數(shù),正如它的函數(shù)名稱所指,這個函數(shù)會在Arduino上電或者復(fù)位并調(diào)用完setup()函數(shù)后連續(xù)循環(huán)的調(diào)用執(zhí)行。loop()函數(shù)是Arduino程序的主體,允許你的程序連續(xù)循環(huán)的獲得外部輸入、進行程序處理和向外輸出。這句話您目前理解起來也許有點費勁,沒關(guān)系,我們可以暫時放一放,隨著學習的深入,您慢慢就會理解,現(xiàn)在您需要了解的是:loop()函數(shù)中的語句,會被Arduino電路板一遍又一遍的從頭到尾的反復(fù)執(zhí)行,直到Arduino電路板復(fù)位或者掉電關(guān)閉。

4.2 代碼講解

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

setup()函數(shù)中就一條語句:

  pinMode(LED_BUILTIN, OUTPUT);

這條語句的作用是告訴Arduino主控板將LED_BUILTIN(這是一個宏,在Arduino的核心庫文件“pins_arduino.h”中已經(jīng)定義,它代表13)引腳,即13引腳,設(shè)置為輸出模式。

請注意Arduino的語法規(guī)則,每條語句都必須以分號結(jié)束,必須是英文字符的分號";",請一定跟中文字符的分號“;”區(qū)分開,請在英文輸入法下進行輸入,否則程序編譯時會出錯。

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  
  delay(1000);           
  digitalWrite(LED_BUILTIN, LOW); 
  delay(1000);  
}

loop()函數(shù)中有四條語句:

  digitalWrite(LED_BUILTIN, HIGH); 

這條語句的作用是向第13引腳寫入HIGH值,由于該引腳已在setup()函數(shù)中通過pinMode()配置為OUTPUT,其電壓將被設(shè)置為相應(yīng)的值:HIGH為5V,LOW為0V(接地),這條語句執(zhí)行后,13引腳的電壓將設(shè)置為5V。

由于UNO板載LED燈的正極接著13引腳,負極接著GND(0V),根據(jù)電路原理,當13引腳的電壓為5V時,LED燈將被點亮。

 delay(1000);     

這條語句的作用是告訴Arduino電路板,在執(zhí)行下一條語句之前先等待1000毫秒(1秒等于1000毫秒)。

digitalWrite(LED_BUILTIN, LOW); 

這條語句的作用是向第13引腳寫入LOW值,其電壓將被設(shè)置為0V,根據(jù)前面的說明,如果13引腳電壓為0V,板載LED燈將熄滅。

 delay(1000);     

這條語句的作用是告訴Arduino電路板,在執(zhí)行下一條語句之前再等待1000毫秒。

由于這是loop()函數(shù),所以Arduino在執(zhí)行完第四條語句后,又開始重復(fù)執(zhí)行l(wèi)oop()函數(shù)的第一條語句,如此反復(fù)。

這個時候,我們再來一條一條的回顧這段代碼:

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  
  delay(1000);           
  digitalWrite(LED_BUILTIN, LOW); 
  delay(1000);  
}

您是不是覺得它已經(jīng)變得非常簡單,它所實現(xiàn)的功能也非常清晰了,那就是:讓板載LED燈按照亮一秒、熄一秒的頻率閃爍。

5 執(zhí)行效果

當您完成上面的一切,您是不是有點迫不及待的想上傳程序到Arduino電路板上看看程序的執(zhí)行效果了?好吧,開始上傳吧,按照本文之前介紹的,先確認電路板跟電腦的連接,如果沒問題,選擇好COM通信端口,點擊“上傳”按鈕。

當程序上傳成功后,Arduino電路板會自動重啟,如果一切正常,您會看到UNO的板載LED開始按照1秒1次的頻率閃爍了。

恭喜您,您的第一個Arduino項目完成了,雖然簡單,但是意義非凡。您已經(jīng)推開了一扇窗,一扇從虛擬的軟件世界到真實的物理世界的窗戶,窗戶那一側(cè)的世界無疑非常精彩,等待著您一起來探索!

如果您喜歡本文,您可以點擊一下下面的喜歡按鈕,您也可以關(guān)注我,謝謝您的支持!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容