Try   HackMD

多個 LEDs 的使用


補充

  • 如何測量LED共陰或共陽 (Google搜尋參考此處)
  • 常用的Arduino板子 (Arduino UNO, Arduino Mega, Arduino Nano)
  • 74HC595 用3個輸入線控制8個針腳
  • WS2812B 可定址的LED,用一條資料線控制全部LED

程式練習

Code1:隨機變換顏色 (此程式適用於共陰 LED)

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)

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)

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)

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; }