RGB LED 有四支腳,我們所用的模組為共陰極,陰極腳接地,其他三支腳位分別控制 R、G、B 色彩。

以下的電路示意與第一段程式碼,示範情境為:以 digitalWrite 對三個顏色的腳位給予不同電位,產生不同的顏色組合。

電路示意圖

RGB LED Circuit

範例程式

int red_led = 11;
int gree_led = 10;
int blue_led = 9;

void setup() {
pinMode(red_led, OUTPUT);
pinMode(gree_led, OUTPUT);
pinMode(blue_led, OUTPUT);
}
void loop() {
//0 black
digitalWrite(red_led, LOW);
digitalWrite(gree_led, LOW);
digitalWrite(blue_led, LOW);
delay(1000);
//1 red
digitalWrite(red_led, HIGH);
digitalWrite(gree_led, LOW);
digitalWrite(blue_led, LOW);
delay(1000);
//2 gree
digitalWrite(red_led, LOW);
digitalWrite(gree_led, HIGH);
digitalWrite(blue_led, LOW);
delay(1000);
//3 yellow
digitalWrite(red_led, HIGH);
digitalWrite(gree_led, HIGH);
digitalWrite(blue_led, LOW);
delay(1000);
//4 blue
digitalWrite(red_led, LOW);
digitalWrite(gree_led, LOW);
digitalWrite(blue_led, HIGH);
delay(1000);
//5 purple
digitalWrite(red_led, HIGH);
digitalWrite(gree_led, LOW);
digitalWrite(blue_led, HIGH);
delay(1000);
//6 Cyan
digitalWrite(red_led, LOW);
digitalWrite(gree_led, HIGH);
digitalWrite(blue_led, HIGH);
delay(1000);
//7 white
digitalWrite(red_led, HIGH);
digitalWrite(gree_led, HIGH);
digitalWrite(blue_led, HIGH);
delay(1000);
}

程式碼二 以迴圈和 analogWrite() 產生三色輪動之燈光明滅的效果(呼吸燈)

const int led[] = {11, 10, 9};
int pinCount = sizeof(led) / sizeof(int);
int brightness = 0;
int lightenstep = 5;
int direct = 1;
int DEBUG = 1;
int delayTime = 50;

void setup() {
for (int pin = 0 ; pin < pinCount; pin++) {
pinMode(led[pin], OUTPUT);
analogWrite(led[pin], brightness);
}

Serial.begin(9600);
}

void loop() {
int pin = 0;
while (pin < pinCount) {
if (DEBUG) {
Serial.print("=== Using Pin: ");
Serial.print(led[pin]);
Serial.println(" ===");
}

breath(pin);

pin++;
delay(delayTime);
}

}

void breath(int ledNums) {
for (int i = 0; i < 255; i += lightenstep) {
brightness += lightenstep;
analogWrite(led[ledNums], brightness);
if (DEBUG) {
Serial.println(brightness);
}
delay(delayTime);
}

for (int j = 255; j > 0; j -= lightenstep) {
brightness -= lightenstep;
analogWrite(led[ledNums], brightness);
if (DEBUG) {
Serial.println(brightness);
}
delay(delayTime);
}
}

思考練習

7LEDs