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

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

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

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

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

1 項目介紹

點亮LED燈玫恳,并讓LED燈閃動岗钩。
在這個項目中,我們先不用自己準(zhǔn)備LED燈臂港,我們先使用Arduino UNO電路板上面集成的LED燈视搏,如下圖紅箭頭所示的位置浑娜。


UNO-01.jpg

在Arduino系列的電路板上,有不少型號都集成了一個可控制的LED燈打颤,但是它們的引腳PIN并不完全相同,Ardunio Uno, MEGA, ZERO是PIN13乖篷,而Ardunio MKR1000是PIN6透且。本文使用的是UNO電路板,如果您手上的電路板不是UNO鲸沮,還請確認(rèn)一下它是否集成有可控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

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


COM04.jpg

現(xiàn)在的個人電腦一般不會配置串口(如果它不是上個世紀(jì)購買的話)豺妓,所以我們使用USB口跟Arduino電路板進(jìn)行通信布讹,這時候我們就需要實現(xiàn)USB口跟串口的轉(zhuǎn)換描验,Arduino電路板上都集成了USB轉(zhuǎn)串口的芯片蔫慧,我們只需要安裝驅(qū)動即可。如果您的電腦安裝驅(qū)動成功睡扬,在電腦的設(shè)備管理(鼠標(biāo)點擊電腦桌面“我的電腦”-點擊鼠標(biāo)右鍵-在彈出菜單中選擇“管理”)中會看到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)的獲得外部輸入添瓷、進(jìn)行程序處理和向外輸出值纱。這句話您目前理解起來也許有點費勁虐唠,沒關(guān)系,我們可以暫時放一放疆偿,隨著學(xué)習(xí)的深入杆故,您慢慢就會理解,現(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ū)分開狸捅,請在英文輸入法下進(jìn)行輸入累提,否則程序編譯時會出錯。

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引腳凫海,負(fù)極接著GND(0V),根據(jù)電路原理漾稀,當(dāng)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í)行效果

當(dāng)您完成上面的一切怔匣,您是不是有點迫不及待的想上傳程序到Arduino電路板上看看程序的執(zhí)行效果了劫狠?好吧永部,開始上傳吧,按照本文之前介紹的懦砂,先確認(rèn)電路板跟電腦的連接组橄,如果沒問題玉工,選擇好COM通信端口,點擊“上傳”按鈕屠升。

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钓葫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子票顾,更是在濱河造成了極大的恐慌础浮,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件库物,死亡現(xiàn)場離奇詭異霸旗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)戚揭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門诱告,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人精居,你說我怎么就攤上這事∏北兀” “怎么了靴姿?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長磁滚。 經(jīng)常有香客問我佛吓,道長宵晚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任维雇,我火速辦了婚禮淤刃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吱型。我一直安慰自己逸贾,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布津滞。 她就那樣靜靜地躺著铝侵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪触徐。 梳的紋絲不亂的頭發(fā)上咪鲜,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機(jī)與錄音锌介,去河邊找鬼嗜诀。 笑死,一個胖子當(dāng)著我的面吹牛孔祸,可吹牛的內(nèi)容都是我干的隆敢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼崔慧,長吁一口氣:“原來是場噩夢啊……” “哼拂蝎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惶室,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤温自,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后皇钞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悼泌,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年夹界,在試婚紗的時候發(fā)現(xiàn)自己被綠了馆里。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡可柿,死狀恐怖鸠踪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情复斥,我是刑警寧澤营密,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站目锭,受9級特大地震影響评汰,放射性物質(zhì)發(fā)生泄漏纷捞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一被去、第九天 我趴在偏房一處隱蔽的房頂上張望兰绣。 院中可真熱鬧,春花似錦编振、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至瓢阴,卻和暖如春畅蹂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荣恐。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工液斜, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叠穆。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓少漆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親硼被。 傳聞我的和親對象是個殘疾皇子示损,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容