2016年4月1日 星期五

Arduino的教學14-RGB led燈(共陰極)的使用

一、教學目標:
學習控制 rgb(紅、綠、藍)的三色led燈。

二、接線圖

RGB LED依序為、最長腳、
RGB LED的共陰極(最長腳)串接一個330的電阻後再接地(GND)。

RGB LED的R接Arduino腳位11。
RGB LED的G接Arduino腳位10。
RGB LED的B接Arduino腳位9。

三、程式碼
1.每隔一秒改變LED的顏色,紅、綠、藍、黃、青、洋紅、白



  1. #define LEDR 9
  2. #define LEDG 10
  3. #define LEDB 11
  4. int timelimit=100;
  5. // 關閉LED的函式
  6. void turnoff(){
  7. digitalWrite(LEDR, LOW);
  8. digitalWrite(LEDG, LOW);
  9. digitalWrite(LEDB, LOW);
  10. }
  11. void setup() {
  12. pinMode(LEDR, OUTPUT);
  13. pinMode(LEDG, OUTPUT);
  14. pinMode(LEDB, OUTPUT);
  15. turnoff();
  16. }
  17. // 每隔一秒改變LED的顏色
  18. void loop() {
  19. turnoff();
  20. digitalWrite(LEDR, HIGH);
  21. delay(500);
  22. digitalWrite(LEDR, LOW);
  23. delay(500);
  24. }
  25.  
  1. // 根據接線圖定義控制R、G、B的腳位
  2. #define LEDR 9
  3. #define LEDG 10
  4. #define LEDB 11
  5.  
  6. // 關閉LED的函式
  7. void turnoff(){
  8. digitalWrite(LEDR, LOW);
  9. digitalWrite(LEDG, LOW);
  10. digitalWrite(LEDB, LOW);
  11. }
  12.  
  13. void setup() {
  14. pinMode(LEDR, OUTPUT);
  15. pinMode(LEDG, OUTPUT);
  16. pinMode(LEDB, OUTPUT);
  17. turnoff();
  18. }
  19.  
  20. // 每隔一秒改變LED的顏色
  21. void loop() {
  22. turnoff();
  23. digitalWrite(LEDR, HIGH);
  24. delay(1000);
  25. turnoff();
  26. digitalWrite(LEDG, HIGH);
  27. delay(1000);
  28. turnoff();
  29. digitalWrite(LEDB, HIGH);
  30. delay(1000);
  31. turnoff();
  32. digitalWrite(LEDR, HIGH);
  33. digitalWrite(LEDG, HIGH);
  34. delay(1000);
  35. turnoff();
  36. digitalWrite(LEDG, HIGH);
  37. digitalWrite(LEDB, HIGH);
  38. delay(1000);
  39. turnoff();
  40. digitalWrite(LEDB, HIGH);
  41. digitalWrite(LEDR, HIGH);
  42. delay(1000);
  43.  
  44.  
  45. turnoff();
  46. digitalWrite(LEDR, HIGH);
  47. digitalWrite(LEDB, HIGH);
  48. digitalWrite(LEDG, HIGH);
  49. delay(1000);
  50.  
  51. }

2.利用pwm輸出,每一秒隨機出現顏色

 
  1. #define LEDR 11
  2. #define LEDG 10
  3. #define LEDB 9
  4.  
  5. void setup() {
  6. pinMode(LEDR, OUTPUT);
  7. pinMode(LEDG, OUTPUT);
  8. pinMode(LEDB, OUTPUT);
  9. }
  10.  
  11. int r = 0;
  12. int g = 0;
  13. int b = 0;
  14. void loop() {
  15. r = random(0, 255);
  16. g = random(0, 255);
  17. b = random(0, 255);
  18. analogWrite(LEDR, r);
  19. analogWrite(LEDG, g);
  20. analogWrite(LEDB, b);
  21. delay(1000);
  22. }
wemos用
  1. // 根據接線圖定義控制R、G、B的腳位
  2. #define LEDR D4
  3. #define LEDG D3
  4. #define LEDB D2
  5. int t = 5;
  6. // 關閉LED的函式
  7. void turnoff() {
  8. digitalWrite(LEDR, LOW);
  9. digitalWrite(LEDG, LOW);
  10. digitalWrite(LEDB, LOW);
  11. }
  12.  
  13. void setup() {
  14. pinMode(LEDR, OUTPUT);
  15. pinMode(LEDG, OUTPUT);
  16. pinMode(LEDB, OUTPUT);
  17. turnoff();
  18. }
  19.  
  20. // 每隔一秒改變LED的顏色
  21. void loop() {
  22. // turnoff();
  23. playOne();
  24.  
  25. }
  26. //依序亮一個燈
  27. void playOne() {
  28. digitalWrite(LEDR, HIGH);
  29. delay(t);
  30. digitalWrite(LEDR, LOW);
  31.  
  32. delay(t);
  33. digitalWrite(LEDG, HIGH);
  34. delay(t);
  35. digitalWrite(LEDG, LOW);
  36. delay(t);
  37.  
  38.  
  39. digitalWrite(LEDB, HIGH);
  40. delay(t);
  41. digitalWrite(LEDB, LOW);
  42. delay(t);
  43. }
  44. //依序亮二個燈
  45. void playTwo() {
  46. digitalWrite(LEDR, HIGH);
  47. digitalWrite(LEDG, HIGH);
  48. delay(t);
  49.  
  50. digitalWrite(LEDR, LOW);
  51. digitalWrite(LEDG, LOW);
  52. delay(t);
  53.  
  54. digitalWrite(LEDB, HIGH);
  55. digitalWrite(LEDG, HIGH);
  56. delay(t);
  57.  
  58. digitalWrite(LEDB, LOW);
  59. digitalWrite(LEDG, LOW);
  60. delay(t);
  61.  
  62.  
  63. digitalWrite(LEDB, HIGH);
  64. digitalWrite(LEDR, HIGH);
  65. delay(t);
  66. digitalWrite(LEDB, LOW);
  67. digitalWrite(LEDR, LOW);
  68. delay(t);
  69. }
  70.  
四、作業 1.請加入一個可變電阻,可改變其delay的時間。 五、參考資源 http://yehnan.blogspot.tw/2013/01/arduinorgb-led.html http://forum.arduino.cc/index.php/topic,8320.0.html http://howtomechatronics.com/tutorials/arduino/how-to-use-a-rgb-led-with-arduino/