# 三色 RGB LED實習

RGB三色LED模組非常廣泛地被使用在創客的專題中，因為只要簡單的連接以及少許的程式，就可以讓LED產生出有趣的效果，在這一單元中我們就使用這個模組來做一些有趣的練習。

這次的RGB LED模組是下面這個：

![](https://2988174335-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8UCGGycRFYs2Gx9M%2F-LNmTIeMiBHBu4TTbIv2%2F-LNmUPrYwF7W9CudRIyM%2F2017-12-24-12.24.41.jpg?alt=media\&token=d7f02ae2-496f-4f53-b4f8-d5af515fe751)

它的特色是模組上已有現成的限流電阻，所以我們可以直接連接到開發板上使用，而它需要的電流不多，因此直接利用板上的信號的輸出電源即可點亮。如上圖所示，它的接腳從左邊數過來，分別是負極（接地）、B（藍）、G（綠）、R（紅）等4支接腳，我們可以使用杜邦線分別把它們連接到micro:bit的GND, P0, P1, P2等輸出。

{% hint style="warning" %}
請注意，不是每一個輸出入埠都是可以使用的，主要的空腳位為：#0, #1, #2, #8, #12, #13, #14, #15, #16, #19和#20
{% endhint %}

從正面看起來是以下這個樣子：

![](https://2988174335-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8UCGGycRFYs2Gx9M%2F-LNmTIeMiBHBu4TTbIv2%2F-LNmW9zypzi5m1PV21nL%2F2018-10-02%2010.01.46.jpg?alt=media\&token=7a2e39e7-d47e-4e31-8a66-83ac86331472)

背面看起來是這樣：

![](https://2988174335-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8UCGGycRFYs2Gx9M%2F-LNmTIeMiBHBu4TTbIv2%2F-LNmWFv-GOdnOUtsUElZ%2F2018-10-02%2010.01.56.jpg?alt=media\&token=1d3a982a-8068-4b30-b320-60df0ace516d)

控制輸出信號積木在「引腳」類，如下所示：

![](https://2988174335-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8UCGGycRFYs2Gx9M%2F-LNmTIeMiBHBu4TTbIv2%2F-LNmWnw7EDnobi8N5TXo%2F2018-10-02_10-06-12.png?alt=media\&token=d44c78f2-617a-474c-ab34-17c94bb2b06d)

我們首先使用數位輸出的方式，分別輸出高電位到P0, P1, 以及P2：

![](https://2988174335-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8UCGGycRFYs2Gx9M%2F-LNmTIeMiBHBu4TTbIv2%2F-LNm_4KSp59xAjzLSsQx%2F2018-10-02_10-19-37.png?alt=media\&token=bd920d47-40d3-4fe5-9d81-7034bafa4400)

上述這個程式會輪流讓你LED分別輪流顯示RGB三個顏色。如果我們使用了上一單元的隨機數來顯示的話，那麼可以變成以下這樣：

![](https://2988174335-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8UCGGycRFYs2Gx9M%2F-LNm_GdXQC7RKYoD6cFz%2F-LNm_rnGeF-9_IxK2l3a%2F2018-10-02_10-24-28.png?alt=media\&token=cabee35d-87a6-4461-be28-31127a930536)

由於三個接腳都有可能是任意的0或1，因此輸出的顏色就是這幾個種顏色的任意組合。

上面是以數位的接腳來看待LED，但是這顆模組其實是支援類別輸入的，也就是它可以由0到 1023，從不亮到逐次增加亮度，直到1023時為最亮，因此，我們把上述的程式全部改為類比寫入，會得到更多的色彩組合。

![](https://2988174335-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8UCGGycRFYs2Gx9M%2F-LNm_GdXQC7RKYoD6cFz%2F-LNmaaIMxGZjpAwvSlQM%2F2018-10-02_10-27-36.png?alt=media\&token=70a3e121-90e2-4331-a43b-6f797b374d41)

既然輸出的數量可以從0到1023共有1024種變化，透過以下的程式，就可以從不亮逐漸地變化到最亮，再從最亮逐漸地變化到最暗，直到完全熄減為止。

還記得之前計數器的程式嗎？同樣的方式，為了達成這個效果，請先建立一個叫做level的變數：

![](https://2988174335-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8UCGGycRFYs2Gx9M%2F-LNm_GdXQC7RKYoD6cFz%2F-LNmbGnj1O7R8AJjhTD5%2F2018-10-02_10-30-16.png?alt=media\&token=c8b329cf-3f26-4f16-954d-4f44f7884a0a)

以及一個叫做delta的變數，在啟動時先把level設定為0，delta最設為1：

![](https://2988174335-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8UCGGycRFYs2Gx9M%2F-LNm_GdXQC7RKYoD6cFz%2F-LNmbsnMqvUtOllsQ5qy%2F2018-10-02_10-33-16.png?alt=media\&token=34264cfb-fff4-4eb2-888c-da2c2013db8f)

然後，每一次都把level增加為delta的值，如果level大於1023，就把delta改為-1，如果level小於0的時候，就把delta設定為1，然後每一次都輸出level的值做為點亮LED的亮度值：

![](https://2988174335-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LMo8UCGGycRFYs2Gx9M%2F-LNm_GdXQC7RKYoD6cFz%2F-LNmd3pWLosDjuei74id%2F2018-10-02_10-38-26.png?alt=media\&token=505cea44-6813-4e24-b46a-56b335d2aeed)

同學們可以執行看看，是否有達成我們想要的效果呢？

{% hint style="info" %}
如果覺得亮度轉變的速度過慢，可以把delta的數字增加，例如+10和-10。
{% endhint %}

{% hint style="info" %}
上述的程式所改變的是白光，同學們也可以自行試試看別的顏色喔。
{% endhint %}
