# 多個 LEDs 的使用
[TOC]
---
<iframe src="//slides.com/shinjia/arduino_leds/embed?token=tFmNFHdQ" width="576" height="420" scrolling="no" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>
- [直接超連結開啟](https://slides.com/shinjia/arduino_leds/fullscreen?token=tFmNFHdQ)
## 補充
- 如何測量LED共陰或共陽 ([Google搜尋](https://www.google.com.tw/search?q=led+共陰測量)、[參考此處](http://content.saihs.edu.tw/contentbook/bep2/U1/07/b/b2_2.htm))
- 常用的Arduino板子 (Arduino UNO, Arduino Mega, Arduino Nano)
- [74HC595](http://www.google.com.tw/search?q=74HC595+Arduino) 用3個輸入線控制8個針腳
- [WS2812B](http://www.google.com.tw/search?q=WS2812B+Arduino) 可定址的LED,用一條資料線控制全部LED
## 程式練習
### Code1:隨機變換顏色 (此程式適用於共陰 LED)
```Arduino=
const int pinR = 9; // 設定 bluePin 的 PWM 驅動腳位
const int pinG = 10; // 設定 greenPin 的 PWM 驅動腳位
const int pinB = 11; // 設定 redPin 的 PWM 驅動腳位
int valueR=0, valueG=0, valueB=0;
void setup()
{
}
void loop()
{
valueR = random(0,50);
valueG = random(0,50);
valueB = random(0,50);
analogWrite(pinR,valueR);
analogWrite(pinG,valueG);
analogWrite(pinB,valueB);
delay(2000);
}
```
### Code2:漸層效果的顏色變化 (此程式適用於共陰 LED)
```Arduino=
const int pinR = 9; // 設定 bluePin 的 PWM 驅動腳位
const int pinG = 10; // 設定 greenPin 的 PWM 驅動腳位
const int pinB = 11; // 設定 redPin 的 PWM 驅動腳位
int maxR = 150;
int maxG = 100;
int maxB = 100;
int count = 100; // 迴圈次數
float valueR, valueG, valueB;
float valueR1, valueG1, valueB1;
float valueR2, valueG2, valueB2;
float stepR, stepG, stepB;
void setup()
{
valueR1 = (float)random(1,maxR);
valueG1 = (float)random(1,maxG);
valueB1 = (float)random(1,maxB);
}
void loop()
{
valueR2 = (float)random(1,maxR);
valueG2 = (float)random(1,maxG);
valueB2 = (float)random(1,maxB);
stepR = (valueR2-valueR1) / count;
stepG = (valueG2-valueG1) / count;
stepB = (valueB2-valueB1) / count;
valueR = valueR1;
valueG = valueG1;
valueB = valueB1;
for(int i=0; i<count; i++)
{
valueR += stepR;
valueG += stepG;
valueB += stepB;
analogWrite(pinR,valueR);
analogWrite(pinG,valueG);
analogWrite(pinB,valueB);
delay(30);
}
valueR1 = valueR2;
valueG1 = valueG2;
valueB1 = valueB2;
}
```
## 如果使用共陽的 LED 呢?
- 最暗值?
- 最亮值?
### Code1:隨機變換顏色 (此程式適用於共陽 LED)
```Arduino=
const int pinR = 9; // 設定 bluePin 的 PWM 驅動腳位
const int pinG = 10; // 設定 greenPin 的 PWM 驅動腳位
const int pinB = 11; // 設定 redPin 的 PWM 驅動腳位
int valueR=0, valueG=0, valueB=0;
void setup()
{
}
void loop()
{
valueR = random(180,255);
valueG = random(200,255);
valueB = random(150,255);
analogWrite(pinR,valueR);
analogWrite(pinG,valueG);
analogWrite(pinB,valueB);
delay(2000);
}
```
### Code2:漸層效果的顏色變化 (此程式適用於共陽 LED)
```Arduino=
const int pinR = 9; // 設定 bluePin 的 PWM 驅動腳位
const int pinG = 10; // 設定 greenPin 的 PWM 驅動腳位
const int pinB = 11; // 設定 redPin 的 PWM 驅動腳位
int maxR = 50;
int maxG = 150;
int maxB = 180;
int count = 100; // 迴圈次數
float valueR, valueG, valueB;
float valueR1, valueG1, valueB1;
float valueR2, valueG2, valueB2;
float stepR, stepG, stepB;
void setup()
{
valueR1 = (float)random(maxR,255);
valueG1 = (float)random(maxG,255);
valueB1 = (float)random(maxB,255);
}
void loop()
{
valueR2 = (float)random(maxR,255);
valueG2 = (float)random(maxG,255);
valueB2 = (float)random(maxB,255);
stepR = (valueR2-valueR1) / count;
stepG = (valueG2-valueG1) / count;
stepB = (valueB2-valueB1) / count;
valueR = valueR1;
valueG = valueG1;
valueB = valueB1;
for(int i=0; i<count; i++)
{
valueR -= stepR;
valueG -= stepG;
valueB -= stepB;
analogWrite(pinR,valueR);
analogWrite(pinG,valueG);
analogWrite(pinB,valueB);
delay(30);
}
valueR1 = valueR2;
valueG1 = valueG2;
valueB1 = valueB2;
}
```