本系列文章為作者原創(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燈视搏,如下圖紅箭頭所示的位置浑娜。
在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接口憎亚。
當(dāng)UNO電路板跟電腦連接上后,如果您使用的是WIN10操作系統(tǒng)蝶锋,電腦會自動安裝USB轉(zhuǎn)串口驅(qū)動程序什往。Arduino電路板是通過串口跟電腦進(jìn)行通信的别威,目前大部分的電腦都不再配備串口,老式的電腦會有粥庄,串口是長這個樣子的:
現(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è)備黍析,如下圖所示:
如果您的電腦沒有自動安裝驅(qū)動阐枣,您可能需要手動安裝一下。詳情請見附錄《Arduino電路板USB轉(zhuǎn)串口驅(qū)動安裝方法》鏈接地址
4 程序代碼
前面介紹過甩鳄,我們的第一個項目并不需要您敲任何代碼额划,在Arduino IDE的文件菜單---示例---01. Basics---Blink,打開Blink文件揖赴,如下圖所示:
下面是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)注我盈罐,謝謝您的支持盅粪!