아두이노 강좌 #46 RGB LED 컬러 인덱스를 사용하여 시리얼 통신으로 제어하기
Lucy / Facilitate4U
2020. 10. 18. 14:46
Arduino Uno : RGB LED Control with ColorIndex
지난 포스트에서는 RGB LED의 기본적인 동작 방법에 대해 설명하였습니다. 이번 포스트는 RGB LED를 쉽게 사용 할 수 있는 방법 중의 하나로,
자주 사용하는 컬러를 배열로 지정하여 배열의 인덱스로 RGB LED 색상을 표현하는 방법을 소개
합니다.하드웨어 연결
회로도 및 연결
아래 그림은 아두이노 우노로 RGB LED를 동작시키기 위한 회로도와 연결 예시입니다. 지난 포스트의 연결 방법과 동일합니다. 본 포스트에 사용한 RGB LED 모듈은 공통 캐소드 타입입니다.
저항이 함께 들어있는 RGB LED Module이 아닌 RGB LED를 그대로 사용하시는 경우 각 LED핀과 아두이노 핀 사이에 300Ω 정도의 저항을 연결 하시길 권장 드립니다.
예제1 : 컬러 인덱스를 사용한 RGB LED 제어
코드
아래 코드는 9가지 RGB 데이터를 배열로 저장하여, loop() 문에서 배열의 인덱스를 사용하여 RGB LED 색상을 표시하는 코드입니다. 아래와 같은 코드를 작성하는 경우, loop() 문 내에서 특정 조건 마다 RGB LED색상을 변경하기 위해 setRGBLED() 함수만 호출하여 사용 할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #define RED 11 // RGB LED Module의 RED 핀 #define GREEN 10 // RGB LED Module의 GREEN 핀 #define BLUE 9 // RGB LED Module의 BLUE 핀 byte bRgbColorIndex[9][3] = { {000, 000, 000}, // index 0 - black(None) {255, 255, 255}, // index 1 - white {255, 000, 000}, // index 2 - red {000, 255, 000}, // index 3 - green {000, 000, 255}, // index 4 - blue {255, 80, 000}, // index 5 - yellow {255, 000, 255}, // index 6 - magenta {000, 255, 255}, // index 7 - cyan {255, 20, 000}, // index 8 - orange }; void setup(){ pinMode(RED, OUTPUT); pinMode(GREEN, OUTPUT); pinMode(BLUE, OUTPUT); } void loop(){ for(int i = 0 ; i < 9 ; i++){ setRGBLED(i); delay(2000); } } void setRGBLED(int colorIndex){ analogWrite(RED, bRgbColorIndex[colorIndex][0]); analogWrite(GREEN, bRgbColorIndex[colorIndex][1]); analogWrite(BLUE, bRgbColorIndex[colorIndex][2]); } | cs |
실행 결과
위 코드를 실행하면 loop()문 내의 for()의 코드와 같이 bRgbColorIndex 배열의 0 ~ 8 Index를 순차적으로 표시하는 것을 확인 할 수 있습니다.
예제2 : 시리얼 통신으로 수신된 인덱스 표시
코드
예제2 코드는 예제1 코드의 응용으로 시리얼 포트로 수신된 인덱스 번호에 따라 RGB LED의 색상을 변경합니다. 시리얼 수신 포트로 0 ~ 8 까지 데이터만 수신된 경우 동작하도록 코드를 작성하였습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | #define RED 11 // RGB LED Module의 RED 핀 #define GREEN 10 // RGB LED Module의 GREEN 핀 #define BLUE 9 // RGB LED Module의 BLUE 핀 byte bRgbColorIndex[9][3] = { {000, 000, 000}, // index 0 - black(None) {255, 255, 255}, // index 1 - white {255, 000, 000}, // index 2 - red {000, 255, 000}, // index 3 - green {000, 000, 255}, // index 4 - blue {255, 80, 000}, // index 5 - yellow {255, 000, 255}, // index 6 - magenta {000, 255, 255}, // index 7 - cyan {255, 20, 000}, // index 8 - orange }; boolean flag = false; // 시리얼 포트로 0 ~ 8 값이 수신된 경우 true 로 활성화 int recIndex; // 시리얼 포트로 0 ~ 8 값이 수신된 경우 수신된 값을 저장 void setup(){ pinMode(RED, OUTPUT); pinMode(GREEN, OUTPUT); pinMode(BLUE, OUTPUT); Serial.begin(9600); while(!Serial){;}; Serial.println("Input Color Index : 0 ~ 8"); Serial.println("Index 0 - black(OFF)"); Serial.println("Index 1 - white"); Serial.println("Index 2 - red"); Serial.println("Index 3 - green"); Serial.println("Index 4 - blue"); Serial.println("Index 5 - yellow"); Serial.println("Index 6 - magenta"); Serial.println("Index 7 - cyan"); Serial.println("Index 8 - orange"); } void loop(){ if(flag){ flag = false; setRGBLED(recIndex); } } void setRGBLED(int colorIndex){ // gRgbColorIndex 배열의 인덱스 값으로 RGB LED 색 표시 analogWrite(RED, bRgbColorIndex[colorIndex][0]); analogWrite(GREEN, bRgbColorIndex[colorIndex][1]); analogWrite(BLUE, bRgbColorIndex[colorIndex][2]); } void serialEvent(){ // Serial 통신 수신되면 호출 되는 시리얼 수신 인터럽트 핸들러 char temp; temp = Serial.read(); if((temp >= '0') && (temp <= '8')){ recIndex = (int)temp - 48; flag = true; } } | cs |
실행 결과
위 코드를 실행하면 아래 영상과 같이 시리얼 통신으로 색상 인덱스를 전송하여 LED의 색상을 변경 할 수 있습니다.
마무리
이번 포스트에서는 자주 사용하는 컬러를 배열로 저장하여, 배열의 인덱스로 RGB LED를 제어하는 방법을 소개하였습니다. 끝까지 읽어 주셔서 감사합니다.😄
'Embedded > Arduino' 카테고리의 다른 글
아두이노 강좌 #47 Arduino Ethernet Shied 2를 사용하여 DHCP, 수동IP 로 네트워크 연결 (1) | 2020.11.10 |
---|---|
아두이노 코딩 : HC-06을 사용하여 스마트폰으로 RGB LED 제어 (Color LED Controller 앱 사용) (0) | 2020.10.20 |
아두이노 강좌 #45 RGB LED 기초 사용법 기초 및 Orange, Yellow 컬러 표시 팁 (0) | 2020.10.18 |
아두이노 코딩 : 스마트폰 블루투스로 HC-06 연결하여 아두이노 LED 제어 (0) | 2020.10.16 |
아두이노 강좌 #44 HC-06으로 스마트폰과 아두이노 연동하기 (0) | 2020.10.15 |