• 沒有找到結果。

Arduino控制串列式全彩LED專題報告

N/A
N/A
Protected

Academic year: 2021

Share "Arduino控制串列式全彩LED專題報告"

Copied!
44
0
0

加載中.... (立即查看全文)

全文

(1)

新北市立泰山高級中學電子科

專題製作報告

指導老師: 陳煥文 陳致中 老師

Arduino 控制串列式全彩 LED

班級: 三年級乙班 23 號

學生: 陳俊穎

中 華 民 國 一 零 六 年 0 5 月 1 9 日

(2)

摘 要

隨科技愈趨發展至登峰造極的地步,我們無法跟隨如此迅雷不 及掩耳的速度,但這些無論新舊的科技產品下其實都是在一系列基 礎以及標準所架構起,我們認為因為時代在日新月異而需要學習更 多不同的技術,其實並不全然,只要將基本的概念釐清並理解,便 能輕易再往更進階的方式去深究,往後面對其他相關技術也能駕輕 就熟。 普遍民眾相信對 LED 此一詞並不陌生,他充斥著我們日常生 活,也扮演著相當重要的角色,像是智慧型手機的觸控螢幕、電視 機、電腦螢幕等都有他的存在,其他像是以廣告業者一例來看,昔 日的廣告宣傳只是使用人力或是書面,甚至是媒體等較傳統的方式 達到產品宣傳效果,於今廣告則是利用 LED 燈特性製作廣告看板, 不僅能在同一面積宣傳不同的資訊,更能省去無用資源。 此次要製作的作品硬體部分即是使用最早,也是現在仍在使用 的PCB印刷版的技術去製作作品的電路板,用到的技術是採用蝕刻當 中的減去法方式完成基板以及電路圖的部分,軟體則是採用Arduino 開發程式撰寫程式碼,進而操控相關實體元件。

(3)

目 錄

摘 要... ...1 目 錄... ...2 第一章 緒論 1-1 研究動機... 4 1-2 研究方法... ...4 第二章 硬體及機器介紹 2-1 Arduino Uno... ...5 2-2 ATmega328 IC... ...6 2-3 Arduino 藍芽模組(HC-06)... ...8 2-4 全彩式 LED... ...8 2-5 三腳DC電源插座... ...8 2-6 7805穩壓IC... 9 2-7 USB B type 90˚ 母座 ...9 2-8 2段3P 迷你小搖頭開關 ...10 2-9 2段6P 開關 ...11 2-10 5P 可變電阻 ...11 2-11 PCB 電路板綜合加工機機台 ...12 第三章 硬體架構與軟硬體設計 3-1 硬體架構... 13 3-2 流程圖... 13 3-3 硬體設計... 14 3-3.1 操作環境... 14 3-3.2 草稿設計...15 3-3.3 Protel99SE 設計過程 ... ... ... ...16 3-4 軟體設計... 17 第四章 專題結果 4-1 功能說明... ...18 4-2 操作流程... ...19 4-2.1 直接展示 ...19 4-2.2 藍芽模式(限Android平台使用) ...21 4-2.3 更改藍芽模式鍵盤參數(限Android平台使用) ...24 第五章 結論與未來展望 5-1 結論... ...27 5-2 未來展望... ...27 5-3 問題討論... ...27 附錄一 Protel99SE 操作過程 ... 28

(4)

附錄二 PCB 電路板綜合加工機電腦操作過程... 33 附錄三 Arduino控制串列式全彩LED燈程式碼... 37 參考文獻... 42

(5)

第一章 緒論

1-1 研究動機

普遍民眾相信對 LED 此一詞並不陌生,他充斥著我們日常生活, 也扮演著相當重要的角色,像是智慧型手機的觸控螢幕、電視機、 電腦螢幕等都有他的存在,其他像是以廣告業者一例來看,昔日的 廣告宣傳只是使用人力或是書面,甚至是媒體等較傳統的方式達到 產品宣傳效果,於今廣告則是利用 LED 燈特性製作廣告看板,不僅 能在同一面積宣傳不同的資訊,更能省去多餘資源。 1-2 研究方法 本次作品主要由ATmega328 IC、藍芽模組以及其他電子零件進 行操控完成後的作品,一開始我們使用Arduino Uno開發板撰寫程式 碼燒錄至ATmega328 IC內,得到自己所需的功能,作品的板子則是 使用PCB印刷電路板技術製作,接著再將需要驅動的元件焊接至電路 板上,最後則是調整功能以及作品呈現出來的完整度。 ▲圖 1-2:研究方法流程圖

(6)

第二章 硬體及機器介紹

2-1 Arduino Uno

微控制器 ATMEGA328 工作電壓 5V 輸入電壓(推薦) 7-12V 輸入電壓(限制) 6-20V 數字 I / O 接腳 14(6 個提供 PWM 輸出) 模擬輸入接腳 6 支 EEPROM 1 KB(ATMEGA328) 震盪速度 16 MHz ▲圖 2-1-1:Arduino Uno 開發版(左) ▲表 2-1-1:Arduino Uno 開發版功能及特性(右) 功能說明: 1.類比輸入接腳 :

Arduino Uno 有 6 支類比輸入腳,標記為 A0 到 A5,每支腳 都可提供 10 位元的解析 (即 1024 種不同的數值)。這些腳位所用 的參考電壓預設為 0 到 5V,不過參考電壓也是可以更改的,方法 是透過 AREF 腳和 analogReference()。

I2C 4 (SDA) 和 5 (SCL) 這兩支腳。透過 Wire library 可 以提供 I2C 通訊。

▲表 2-1-2:Arduino Uno 類比輸入接腳功能 2.數位 I/O 接腳 :

14 支數位 I/O 接腳 可以當作 input 使用,也可以當作 output 使用,使用方法是透過 pinMode(), digitalWrite(),

(7)

Serial 通訊 0(RX) 和 1 (TX) 這兩支腳。用來接收(RX)與傳輸 (TX) TTL 訊號的序列資料。這兩支腳也連接到 USB Converter 晶片中。 外部中斷 2 和 3 這兩支腳。這兩支腳可以利用外部事件觸發 中斷。 PWM 3, 5, 6, 9, 10 和 11 共六支腳。透過 analogWrite() 函式可以提供 8-bit 的 PWM 輸出。 SPI 10 (SS), 11 (MOSI), 12 (MISO) 和 13 (SCK) 這 四支腳。這四支腳搭配 SPI Library 可提供 SPI 序 列通訊。

LED 13。內建一顆 LED,當 pin 腳為 HIGH 時,LED 打 開,當 pin 腳為 LOW 時,LED 關閉。

▲表 2-1-3:Arduino Uno 數位 I/O 接腳功能

3.其它:

AREF 類比輸入的參考電壓,搭配 analogReference() 函式一 起使用。

Reset 當 Reset 腳為 LOW 時,微控制器會重置。 ▲表 2-1-4:Arduino Uno 類比輸入接腳功能

2-2 ATmega328 IC

Arduino UNO 用的是同一顆 ATmega328 晶片,下表是 ATmega328 的晶片特性摘要:

(8)

特性 說明 Operating Voltage 1.8V - 5V Flash Memory 32 KB SRAM 2 KB EEPROM 1 KB Clock Speed 16 MHz External Interrupt 2

Timer Two 8-bit Timer/Counters with Prescaler and Compare Mode One 16-bit Timer/Counter with

Prescaler, Compare and Capture Mode PWM Channel 6 Channels

ADC Channel 8 Channels 10-bit ADC in TQFP package 6 Channels 10-bit ADC in PDIP package USART 1

SPI 1

TWI Phlilips I2C compatible

▲表 2-1-1:ATmega328 IC 功能及特性

I/O 腳位配置圖 (Pinout) 如下:

(9)

2-3 Arduino 藍芽模組(HC-06)

▲圖2-3-1:Arduino 藍芽模組(HC-06)實體圖(左) ▲圖2-3-2:Arduino 藍芽模組(HC-06)腳位說明(右)

2-4 全彩式 LED

▲圖2-4-1.2:全彩式 LED實體圖(左)、腳位定義(右) 全彩式LED的腳位定義有不同的連接方式,此次專題則是採用圖 內所說明的連接。

2-5 三腳DC電源插座

Arduino上的驅動電源孔,通常圖中的 第1、2腳為接地(GND),第3腳則是接電(Vcc)。

(10)

◥圖2-5-1:三腳DC電源插座實體圖 ▲圖2-5-2:三腳DC電源插座腳位定義及規格圖

2-6 7805穩壓IC

可使原電壓穩定在+5V的IC,共3支腳 位,其中腳位是以零件正面朝自己,最左邊 為輸入(Input)、中間為共接地(Ground), 最右邊則是輸出(Output)。 ◥圖2-6:7805穩壓IC實體圖及腳位定義

2-7 USB B type 90˚ 母座

USB訊號使用分別標記為D+ 和D- 的雙絞線 傳輸,它們各自使用半雙工的差動訊號並協同 工作,以抵消長導線的電磁干擾。

(11)

◥圖2-7-1:USB B type 90˚ 母座實體圖 ▲圖2-7-2:USB B type 90˚ 母座腳位定義圖 ▲表2-7:USB B type 90˚ 母座腳位定義表

2-8 2段3P 迷你小搖頭開關

通常做為訊號源的切換,此專題則

作為電源不同供應的方式作切換。

◥圖2-8-1:2段3P 迷你小搖頭開關實體圖 ▲圖2-8-2:2段3P 迷你小搖頭開關腳位定義及規格圖 腳位 功能 1 VBUS (4.75-5.25 V) 2 D-3 D+ 4 接地

(12)

2-9 2段6P 開關

通 常 做 為 訊 號 源 的

切換,此專題則作為訊號

輸入的不同作切換。

◥圖2-9-1:2段6P 開關實體圖 ▲2-9-2:2段6P 開關腳位定義及規格圖

2-10 5P 可變電阻

通常做為訊號源強度的類比調整,

此專題則作為全彩式LED的亮度作亮暗

微調。。

◥圖2-10-1:5P 可變電阻實體圖

(13)

▲圖2-10-2:5P 可變電阻腳位定義圖

2-11 PCB 電路板綜合加工機機台

校方提供的機台,在電腦系統Windows XP下運作,有多種刀片 可供切換使用,內部功能皆為基礎使用者也能上手。 ▲圖2-11-1:PCB 電路板綜合加工機機台-整體(左上) ▲圖2-11-2:PCB 電路板綜合加工機機台-雕刻刀工作台(右上) ▲圖2-11-3:PCB 電路板綜合加工機機台-雕刻刀盒(左下) ▲圖2-11-4:PCB 電路板綜合加工機機台-雕刻刀手臂(右下)

(14)

第三章 硬體架構與軟硬體設計

3-1 硬體架構

▲圖3-1:作品概念架構 概念說明: 1. 藍芽控制:藉由手機端傳送指令給串列式LED進行操作。 2. 直接展示:藉由鋰電池供電給電路板運作。 3. 調整亮度:當串列式LED燈正在顯示時,可以利用可變電阻調整發 光亮度。 4. 按鈕展示:按下電路板上的按鈕顯示功能。

3-2 流程圖

(15)

流程圖說明: 1. 相關資料蒐集:蒐集此次作品所需材料各相關特性以及使用說明。 2. 硬體製作:使用”Protel99SE”印刷電路板程式製作線路檔案,並 且將檔案輸出至雕刻機台進行雕刻。 3. 軟體程式設計:採用Arduino Uno撰寫程式碼並寫入ATmega 328 IC 晶片。 4. 完成作品:將元件焊接至電路板上並測試功能。

3-3 硬體設計

3-3.1 操作環境 關於硬體的設計使用的是”Protel99SE”印刷電路板設計程式進 行拉線(Layout)設計,以及”PCB Prototype Machine電路板綜合 加工機”程式,使雕刻機台能夠讀取到檔案進行PCB完成電路板切割。

(16)

▲圖3-3-1:Protel99SE 操作環境 ▲圖3-3-2:PCB Prototype Machine電路板綜合加工機 操作環境 3-3.2 草稿設計 在一開始在電腦設計前,先在空白紙上打好電路圖草稿,避免 在電腦上直接修改電路的麻煩,草稿如圖下: ▲圖3-3-3,4:草稿圖-零件連結概念設計圖(左),

(17)

▲圖3-3-5:草稿圖-串列式全彩LED佈線圖 做完草稿後依序清點草稿上所需零件並進行採購,清單如下: 3-3.3 Protel99SE 設計過程 由於操作過程過於冗長,詳細過程詳見附錄。 當草稿完成後再使用Protel99SE印刷電路板設計程式進行拉線 (Layout),完成後如下: ▲圖3-3-6:草稿圖-佈線完成圖

(18)

當拉線設計完畢後,還需要PCB Prototype Machine電路板綜合 加工機與雕刻機台連線操作,將剛剛拉線好的檔案輸入進去使機器 運作,雕刻出電路板。 ▲圖3-3-7:草稿圖-佈線完成圖

3-4 軟體設計

軟體則是使用Arduino撰寫程式燒寫至ATmega328 IC晶片內以致 操控全彩式LED,其中包含藍芽模組,程式碼請詳見附錄。

(19)

第四章 專題結果

4-1 功能說明

下列為關於作品的操作功能介紹,如需了解詳細內容可以掃描 下方QR code連結至YouTube影片進行觀看。 ▲圖4-1、2:實體作品(左)及作品介紹及操作過程QR code(右) 串列式全彩 LED 簡易操作說明: 1. 提供三種電源切換選擇 A. 鋰電池:往右撥同時將按鈕放開(註:不用時須按下) B. 5VDC 變壓器:往左撥同時將按鈕按下,避免降壓耗電 C. USB 行動電源:往下撥同時將按鈕按下,避免降壓耗電 2. 可變電阻用來調整 LED 亮度 3. 當展示按鈕放開做自動展示,搭配按鈕,可做兩種動態展示 4. 按鈕展示按下是做藍芽控制,HC-6 密碼 1234,可用手機控制 (限 Android 平台使 用),可調整功能如下: A.RGB(0,0,0,)各個顏色單一±5 B.亮燈順序的快慢(±10ms) C.亮燈亮度的明暗(±2lux) D.清除現在設定值至 RGB(0,0,0) E.重設現在設定值至 RGB(100,100,100)

(20)

4-2 操作流程

4-2.1 直接展示

▲圖4-3:按鈕壓壓-四字依序點亮+春雨特效示意圖-1

▲圖4-2-1:按鈕壓壓-四字依序點亮+春雨特效示意圖-2

(21)

▲圖4-2-4:按鈕壓壓-四字依序點亮+春雨特效示意圖-5

▲圖4-2-5:按鈕壓放-GRB依序點亮+靛藍龍捲風示意圖-1

▲圖4-2-6:按鈕壓放-GRB依序點亮+靛藍龍捲風示意圖-2

(22)

▲圖4-2-8:按鈕壓放-GRB依序點亮+靛藍龍捲風示意圖-4

▲圖4-2-9:按鈕放壓-彩虹特效示意圖

4-2.2 藍芽模式(限Android平台使用)

Step 1: 至”Google Play商店”搜尋”藍芽串 手助手增強版(Bluetooth spp pro)”並下載, 程式免費。

(23)

Step 2: 開啟程式。

Step 3: 進入程式後,程式會自動開始搜尋附 近裝置,搜尋結束後,點選藍芽模組的選項。

(24)

Step 5: 輸入藍芽模組預設密碼”1234”後點 選「確定」。

Step 6: 點選「連接裝置」。

(25)

Step 8: 進入介面後即可進行LED的細部調整控 制。

▲圖4-2-10:按鈕放放-手機藍芽控制示意圖

(26)

Step 1: 在鍵盤操作介面點選右上角的選項鍵。

Step 2: 點選「配置鍵盤值」。

Step 3: 對下方3*4共12方格隨意點選一格進行 設定。

(27)

Step 4: 進行參數設定,顯示名稱一定要取名, 以及輸入按下欄位參數設定定義。 按下 定義 0 RGB(+0,+0,+5) 1 RGB(+0,+0,-5) 2 RGB(+0,+5,+0) 3 RGB(+0,-5,+0) 4 RGB(+5,+0,+0) 5 RGB(-5,+0,+0) 6 速度+10ms 7 速度-10ms 8 亮度-2lux 9 亮度+2lux C 清除現在設定值至RGB(0,0,0) R 重設現在設定值至RGB(100,100,100) ▲表4-2:按下定義參數

(28)

第五章 結論與未來展望

5-1 結論

針對串列式全彩LED在商業有一定的使用地位及價值,此次研究 成功順利探討該元件特性以及定義,最後撰寫程式進行對LED的操 作,跟一般發光二極體截然不同的是,串列式全彩LED藉由頻率達到 改變顏色的效果,而在程式的定義則是採RGB光的三原色作定義,並 且可以藉由藍芽模組,使用智慧型手機操作LED亮燈順序、顏色及速 度。

5-2 未來展望

現代科技產業發達,每一項產品值得關注及研究發展,本次專題 使用大量的LED在電子領域中佔領重要的地位,生活中時常看到他的 身影,這些物品成為我們身邊不可或缺的物質,但時代變遷快速, 人們必須學習更多技能,以應對及適應無法預知的未來。

5-3 問題討論

Q1.電路圖尺寸設計完畢後發現比實際尺寸過大或過小。 A1.只能捲土重來,必須仔細調整尺寸間距參數值並確認再開始拉 線。 Q2.雕刻機在雕刻印刷版時,雕刻刀卻未依照檔案進行雕刻。 A2.由於校內雕刻機硬體設備老舊,在進行首次雕刻時先隨意找一塊 廢棄印刷版進行硬體設備的測試再雕刻新的印刷版。 Q3.印刷版焊接過程時,測試 LED 亮燈情況卻不正常運作 A3.由於此實驗使用印刷版的減去法進行拉線雕刻,當機台雕刻完畢 後難免會產生微小碎屑卡在兩線路之間導致線路相互短路,此時必 須使用軟質刷子將剛雕刻完畢的印刷版雕刻面完整刷過,確保無短 路情況發生,或是可使用三用電表測量。

(29)

附錄一 Portel99SE 操作過程

Step 1: 先新增資料夾以便放置稍後設計產 生出來的檔案,接著再執行程式。 Step 2: 點選「檔案」→「開新檔 案」。 Step 3: 點選「Browse…」 選擇剛建立好的新資料夾路 徑後再點選「OK」。

(30)

Step 4: 點選「檔案」→「開新檔 案」。 Step 5: 點選 「 PCB Document 」 → 「OK」。 Step 6: 雙擊剛建立的檔 案即可進行設計。 Step 7: 設計完成後,要輸出檔案 給雕刻機的專有檔案讀取,必須再 另外新增資料夾存放給雕刻機讀 取的檔案,建立後,在操作環境上 點選「檔案」→「開新檔案」。

(31)

Step 8: 點選「CAM output configuration」→「OK」。 Step 9: 點選剛剛設計完成的檔案後再 點選「OK」。 Step 10: 看到此畫面後點選 「NEXT」還會有五次不同的 頁面需要確認,此時頁面內 的選項接不用特別選取,直 接繼續下一步。 Step 11: 看到此畫面後點選 「Finish」。

(32)

Step 12: 點選剛剛建立好的 檔案會出現一個已經建立好 的「Bom Output1」。 Step 13: 點選「編輯」此時 我 們 只 需 要 輸 出 兩 個 檔 案 「 Insert Gerber… 」 以 及 「Insert NC Drill…」,當 這兩個選項點選之後皆會跳 出視窗,此時皆只要直接點 選「OK」即可。

Step 14: 建立完成後會顯示「Gerber Output 1」以及「NC Drill Output 1」檔案,記住, 檔案名稱旁邊的勾勾請不要取消勾選。

(33)

Step 15: 在操作環境上點選「工具」→ 「Generate CAM Files」。

Step 16: 輸出完畢後,操作環境最左邊的 路徑欄位會顯示剛才產生的檔案。 Step 17: 將其剛才產生的 輸出檔全部反白選取,接著 在操作環境上的工作列點 選「檔案」→「輸出」。

(34)

Step 18: 選擇剛才新建立的資 料夾路徑再點選「確定」。

附錄二 PCB 電路板綜合加工機電腦操作過程

Step 1: 先新增資料夾以便放置稍後設計 產生出來的檔案,接著再執行程式。 Step 2: 在工具列點選「檔案」→「新的 檔案」。

(35)

Step 3: 在設定視窗中,只 需 要 再 載 入 焊 錫 面 的 「Gerber File」、「Aperture File」以及鑽孔檔即可。 Step 4: 在 尋 找 焊 錫 面 的 「Gerber File」檔案類型時 請選擇副檔名為「.GBL」才 能找到相符合的檔案。 Step 5: 在 尋 找 焊 錫 面 的 「Aperture File」檔案類 型時請選擇「PROTEL *A*」 才能找到相符合的檔案。 Step 6: 在尋找鑽孔檔的檔 案類型時請選擇「PROTEL *TXT」才能找到相符合的檔 案並選擇檔案名稱與當初在 Protel99SE命名的名稱。

(36)

Step 7: 點選「確定」。 Step 8: 點選「路徑計算」, 才能讀取電路圖檔案有無錯 誤。 Step 9: 設定值皆不變,點選 「確定」。 Step 10: 點選「確定」。

(37)

Step 11: 為使觀看結果清晰,在工具列點選「規 畫」→「圖層控制」。 Step 12: 一開始預設選項值接全部勾 選,此時只要勾選「鑽孔層」、「實體線」 及「T1 隔離線」選項即可,接著再點選 「OK」。 Step 13: 呈現圖層如右圖。

(38)

附錄三 Arduino控制串列式全彩LED燈程式碼

#include <Adafruit_NeoPixel.h> #define TOP_DOWN 0

#define DOWN_TOP 1

#define MEDIUMSPRINGGREEN 0x00FA9A #define INDIGO 0x4B0082

const int pot = A5; //宣告可調電阻分壓後連接在A5腳,以調整亮度 #define PIN 9

#define LED_CNT 42 //宣告多少顆LED // 建構名為leds的Adafruit_NeoPixel 類別

Adafruit_NeoPixel leds = Adafruit_NeoPixel(LED_CNT, PIN, NEO_GRB + NEO_KHZ800); // 設定=================================================================== void setup() { pinMode(2, INPUT); pinMode(3, INPUT); leds.begin(); // 初始化 clearLEDs(); // 關閉所有LED leds.show(); // 開啟所有LED } // 主程式 =================================================================== void loop(){ int x=analogRead(pot); leds.setBrightness(x/4); //宣告可調電阻分壓後連接在A5腳,以調整亮度 brightness();

int button3_State = digitalRead(3); int button4_State = digitalRead(2);

if (button3_State == HIGH && button4_State == HIGH ) { //三原色逐字點亮

for (int i=0; i<LED_CNT; i++) { clearLEDs(); // 關閉所有LED for (int j=0; j<=i; j++) {

leds.setPixelColor(j, 255, 0, 0); // 綠色 } brightness(); // 調整亮度 leds.show(); // 開啟所有LED delay(20); // 持續顯示 }

for (int i=0; i<LED_CNT; i++) { clearLEDs(); // 關閉所有LED for (int j=0; j<=i; j++) {

leds.setPixelColor(j, 0, 255, 0); // 紅色 }

(39)

delay(20); // 持續顯示 }

for (int i=0; i<LED_CNT; i++) { clearLEDs(); // 關閉所有LED for (int j=0; j<=i; j++) {

leds.setPixelColor(j, 0, 0, 255); // 藍色 } brightness(); // 調整亮度 leds.show(); // 開啟所有LED delay(20); // 持續顯示 } //單字閃爍 clearLEDs(); // 關閉所有LED for (int i=0; i<8; i++) {

leds.setPixelColor(i, 255, 0, 0);} // 第1個字綠色 brightness(); // 調整亮度

leds.show(); // 開啟所有LED delay(500); // 持續顯示 for (int i=8; i<8+12; i++) {

leds.setPixelColor(i, 0, 255, 0);} // 第2個字紅色 brightness(); // 調整亮度

leds.show(); // 開啟所有LED delay(500); // 持續顯示 for (int i=8+12; i<8+12+12; i++) {

leds.setPixelColor(i, 0, 0, 255);} // 第3個字藍色 brightness(); // 調整亮度

leds.show(); // 開啟所有LED delay(500); // 持續顯示

for (int i=8+12+12; i<8+12+12+10; i++) {

leds.setPixelColor(i, 128, 128, 128);} // 第4個字白色 brightness(); // 調整亮度

leds.show(); // 開啟所有LED delay(3000); // 持續顯示 }

if (button3_State == HIGH && button4_State == LOW ) { // 漫步彩虹大道 (重複10週)

for (int i=0; i<LED_CNT*20; i++) { rainbow(i); // 執行彩虹顯示功能 delay(20); // 持續顯示

} }

if (button3_State == LOW && button4_State == HIGH ) { // 靛藍龍捲風 (重複10週)

(40)

// 龍捲風函數:第一個引數為顏色,第二個引數為週期(時間) }

}

if (button3_State == LOW && button4_State == LOW ) { // 春雨(執行由上而下瀑布20次)

for (int i=0; i<10; i++) {

cascade(MEDIUMSPRINGGREEN, TOP_DOWN, 50); // 第一個引數為顏色, 第二個引數為方向, 第二個引數為掉落時間(ms) } } } // 龍捲風函數============================================================= void cyclone(unsigned long color, byte wait) {

// weight 為淡化外部眼顏色的亮 const byte weight = 4;

// 分離24位元格式為8位元RGB格式 byte red = (color & 0xFF0000) >> 16; byte green = (color & 0x00FF00) >> 8; byte blue = (color & 0x0000FF); // 由最近的LED往內移

for (int i=0; i<=LED_CNT-1; i++) { clearLEDs(); // 關閉所有LED

leds.setPixelColor(i, red, green, blue); // 設定亮的中間眼Set the bright middle eye

// 使兩個眼往兩側逐漸變暗 for (int j=1; j<3; j++) { if (i-j >= 0)

leds.setPixelColor(i-j, red/(weight*j), green/(weight*j), blue/(weight*j));

if (i-j <= LED_CNT)

leds.setPixelColor(i+j, red/(weight*j), green/(weight*j), blue/(weight*j));

}

brightness(); // 調整亮度

leds.show(); // Turn the LEDs on delay(wait); // Delay for visibility }

// 反向操作

for (int i=LED_CNT-2; i>=1; i--) { clearLEDs(); // 關閉所有LED

leds.setPixelColor(i, red, green, blue); for (int j=1; j<3; j++) {

if (i-j >= 0)

(41)

leds.setPixelColor(i+j, red/(weight*j), green/(weight*j), blue/(weight*j)); } brightness(); // 調整亮度 leds.show(); // 開啟所有LED delay(wait); // 持續顯示wait時間 } } // 瀑布函數=============================================================== void cascade(unsigned long color, byte direction, byte wait)

{

if (direction == TOP_DOWN) { // 由上而下

for (int i=0; i<LED_CNT; i++) { clearLEDs(); // 關閉所有LED

leds.setPixelColor(i, color); // 設定此LED的顏色 brightness(); // 調整亮度 leds.show(); // 開啟所有LED delay(wait); // 持續顯示wait時間 } } else { // 由下而上

for (int i=LED_CNT-1; i>=0; i--) { clearLEDs(); // 關閉所有LED

leds.setPixelColor(i, color); // 設定此LED的顏色 brightness(); // 調整亮度 leds.show(); // 開啟所有LED delay(wait); // 持續顯示wait時間 } } } // 關閉所有LED函數 ========================================================== // 設定顏色為黑色,再呼叫show()函數,即可關閉LED void clearLEDs() {

for (int i=0; i<LED_CNT; i++) { leds.setPixelColor(i, 0); }

}

// 彩虹函數================================================================ void rainbow(byte startPosition) {

(42)

// 0-191總共192個顏色(紅=>橙=>黃=>綠=>…=>紫)

leds.setPixelColor(i, rainbowOrder((rainbowScale * (i + startPosition)) % 192)); } brightness(); // 調整亮度 leds.show(); // 開啟LED } // 產生彩虹色帶函數====================================================== // 輸入0~191以取得顏色值 // 顏色變化為紅=>黃=>綠=>淺綠=>藍=>粉紅=>紅... uint32_t rainbowOrder(byte position) {

// 6個顏色區域(每區32點)

if (position < 31) { // 紅=>黃 (Red = FF, blue = 0, Green = 00=>FF) return leds.Color(0xFF, position * 8, 0); // 只遞增綠色成份 }

else if (position < 63) { //黃=>綠 (Red = FF=>00, Green = FF, blue = 0) position -= 31; // 第2區

return leds.Color(0xFF - position * 8, 0xFF, 0); // 只遞減紅色成份 }

else if (position < 95) { //綠=>淺綠 (Red = 0, Green = FF, Blue = 00=>FF) position -= 63; // 第3區

return leds.Color(0, 0xFF, position * 8); // 只遞增藍色成份 }

else if (position < 127) { //淺綠>藍 (Red = 0, Green = FF=>00, Blue = FF) position -= 95; // 第4區

return leds.Color(0, 0xFF - position * 8, 0xFF); // 只遞減綠色成份 }

else if (position < 159) { //藍=>粉紅 (Red = 00=>FF, Green = 0, Blue = FF) position -= 127; // 第5區

return leds.Color(position * 8, 0, 0xFF); // 只遞增紅色成份 }

else {//160 <position< 191 粉紅=>紅 (Red = FF, Green = 0, Blue = FF=>00) position -= 159; // 第6區

return leds.Color(0xFF, 0x00, 0xFF - position * 8); // 只遞減藍色成份 }

}

void brightness() // 讀取A5分壓結果,以控制亮度 { int x=analogRead(pot);

leds.setBrightness(x/4); }

(43)

參考文獻

2.1文獻:

http://newsletter.ascc.sinica.edu.tw/news/read_news.php?nid=2

782

2.2文獻:

http://coopermaa2nd.blogspot.tw/2011/07/1-avr.html

2.3文獻:

http://roboticarivas.org/arduino-hc-06/

http://swf.com.tw/?p=693

2.4文獻:

http://cn.made-in-china.com/photo/LEDqcRGB1-6.html

http://www.marcador.cc/arduino-全彩-led/

2.5文獻:

http://www.icshop.com.tw/product_info.php/products_id/1780

http://m.lm158.com/wx/2016331/156166.html

2.6文獻:

http://gcbbs.digitw.com/phpbb2/viewtopic.php?f=3&t=1348&p

=15329

http://designer.mech.yzu.edu.tw/articlesystem/article/compresse

dfile/(2005-02-28)%20Protel%E9%9B%BB%E8%85%A6%E8

%BC%94%E5%8A%A9%E9%9B%BB%E8%B7%AF%E8%A

8%AD%E8%A8%88%E8%BB%9F%E9%AB%94%E5%85%A

5%E9%96%80(1)%E2%80%94%E5%9F%BA%E6%9C%AC%

E6%93%8D%E4%BD%9C%E8%88%87%E9%9B%BB%E8%

B7%AF%E7%B7%A8%E8%BC%AF.aspx?ArchID=730

(44)

2-7文獻:

http://www.digitaldoityourself.com/goods.php?id=782

http://www.smartkonn.com/cp/class/?0.html&page=35&showtj=

&showhot=&key

2-8文獻:

https://tw.taobao.com/product/%E9%88%95%E5%AD%90%E9

%96%8B%E9%97%9C%20%E9%80%B2%E5%8F%A3.htm

http://shop.cpu.com.tw/product/1606/info/

2-9文獻:

http://goods.ruten.com.tw/item/show?21310172083536

2-10文獻:

http://www.sconline.com.tw/product/product_info.php?products

_id=0109990034

https://www.slideshare.net/nctutlc2013/ss-23989657

參考文獻

相關文件

系統提醒 點選 確定... 初階進階教輔期程檢視

審查後完成教學觀察表 綜合報告表 再請對方填寫成長計畫 審核後完成...

 點選「 Single Solution」 選項予以求解電力潮流,然 後再點選「 Case Information 與Bus…」 選項,以觀看 所有匯流排的相關資訊。.  為迅速獲得最低的匯流排電壓值,請於

點選第二列/create

選取『篩選條件』選項,可依 [未決品項]、[未報 價品項] 等狀態顯示符合條件投標品項.

�您�� BIOS 設定完成後,請選擇本項目以�認所有設定值存入 CMOS 記憶體內。按下 &lt;Enter&gt; 鍵後�出現一個詢問視窗,選擇 [Ok],�設定值存 Ok],�設定值存 ],�設定值存 入

• 點選 Method Editor 來進行方法程式編輯(同樣,也可 在開啟後的視窗中,點選 Form Editor 來切回原視窗). Form

勾選確認資料無誤,並點選