我是潘,,曾經(jīng)是個(gè)工程師。這是為Ardui.Co 寫的專欄,。上一課,,你已經(jīng)了解Arduino 的基本工作原理,并且學(xué)會(huì)了控制一個(gè)燈,,但覺得不夠酷,?Arduino Uno 有13個(gè) DIGITAL I/O 端口,可以同時(shí)控制13個(gè) LED,。而且 Arduino 還可以通過 I2C,、SPI 等協(xié)議擴(kuò)展,控制幾百個(gè) LED 都不成問題,,但擴(kuò)展我們后面再講,,現(xiàn)在先演示一下怎樣控制多個(gè) LED 。 電路是這樣設(shè)計(jì)的:從第 8 個(gè) DIGITAL I/O 開始到第 13 個(gè),,每個(gè)端口串聯(lián)一個(gè)220歐姆的電阻和 LED,。其中,LED 正極(長(zhǎng)的一端)接電阻,,電阻再接I/O,,LED 負(fù)極接地(Arduino 上的 GND 端口) 我們選用紅黃綠 3 種 LED,但每種顏色的 LED 壓降都不一樣,,紅色約 2.1V,,黃色2.4V、綠色2.7V,而 Arduino DIGITAL I/O 輸出高電平為 5V ,,這意味著串聯(lián)的電阻壓降不一樣,,三種 LED 通過電流大小不等,因此別奇怪它們的亮度不同,。 現(xiàn)在要讓 LED 按順序輪流點(diǎn)亮,,就是傳說中的跑馬燈效果,程序如下:
看看效果: 這程序很容易理解,,端口 8~13 設(shè)置為輸出模式,然后點(diǎn)亮一個(gè)就滅掉一個(gè),,而且也能很好工作,。只是重復(fù)代碼太多,6 個(gè) LED 好處理,,但如果有幾百個(gè) LED 呢,? Arduino Uno 只有 32KB 程序空間,因此必須精簡(jiǎn)以節(jié)約空間,,這樣才能在以后容納更復(fù)雜的系統(tǒng),。我們將上述程序改成 for 循環(huán):
IDE顯示,沒有優(yōu)化前,,程序占用1,270 字節(jié),,優(yōu)化后為 1,122 字節(jié),總空間的3%?,F(xiàn)在對(duì)于動(dòng)輒幾 TB 存儲(chǔ)空間的個(gè)人電腦來講,1KB 根本不足道,,但對(duì) Arduino ,,每一個(gè)字節(jié)都要精打細(xì)算。 現(xiàn)在我們讓它有更多的變化,,加入一個(gè)隨機(jī)函數(shù) random(),,讓跑馬燈循環(huán) 3 遍后,隨機(jī)點(diǎn)亮 3 個(gè),。 random(x) 函數(shù),,能夠在 0 ~ x(不包含最大值 x)的范圍內(nèi)隨機(jī)生成一個(gè)整數(shù),比如 random(256),,隨機(jī)生成 0 ~ 255 中的一個(gè)整數(shù),,再如 random(10, 20),隨機(jī)生成 10 ~ 19 中的一個(gè)整數(shù),。 void loop(),,本身已經(jīng)是個(gè)循環(huán),我們要在里面嵌套一個(gè)小循環(huán):
p 是一個(gè)變量,,用 random() 給它賦值前,,要聲明它的類型為整數(shù) int:
但為了節(jié)省空間,,我們把它寫成上面的形式。 燈光不僅是我們塑造環(huán)境氛圍的一種基本需求,,而且是一種藝術(shù)表現(xiàn)形式,。后面你會(huì)發(fā)現(xiàn)通過 Arduino ,往往只需簡(jiǎn)單幾段代碼,,就可以創(chuàng)造出千變?nèi)f化的效果,。 |
|