#include
// 핀
constexpr uint8_t IR_PIN = 2; // IR OUT
constexpr uint8_t R_PIN = 9; // PWM
constexpr uint8_t G_PIN = 10; // PWM
constexpr uint8_t B_PIN = 5; // PWM
// 공통 타입: 공통 애노드면 true, 공통 캐소드면 false
// 색이 반대로 나오거나하면 조정
constexpr bool COMMON_ANODE = false;
// 디바운스
constexpr uint16_t DEBOUNCE_MS = 160;
uint16_t lastCmd = 0xFFFF;
uint32_t lastTime = 0;
// ── 아래 리모콘 코드는 반드시 시리얼모니터로 값을 확인 후 수정 ──
#define CMD_CHM 0x45 // CH-
#define CMD_CH 0x46 // CH
#define CMD_CHP 0x47 // CH+
#define CMD_PREV 0x44 // <<
#define CMD_NEXT 0x40 // >>
#define CMD_PLAY 0x43 // PLAY/PAUSE
#define CMD_VOLM 0x07 // VOL-
#define CMD_VOLP 0x15 // VOL+
#define CMD_EQ 0x09 // EQ
#define CMD_NUM0 0x16 // 0
#define CMD_NUM1 0x0C // 1
#define CMD_NUM2 0x18 // 2
#define CMD_NUM3 0x5E // 3
#define CMD_NUM4 0x08 // 4
#define CMD_NUM5 0x1C // 5
#define CMD_NUM6 0x5A // 6
#define CMD_NUM7 0x42 // 7
#define CMD_NUM8 0x52 // 8
#define CMD_NUM9 0x4A // 9
#define CMD_100P 0x19 // 100+
#define CMD_200P 0x0D // 200+
// 색 출력
inline void setColor(uint8_t r, uint8_t g, uint8_t b) {
if (COMMON_ANODE) {
analogWrite(R_PIN, 255 - r);
analogWrite(G_PIN, 255 - g);
analogWrite(B_PIN, 255 - b);
} else {
analogWrite(R_PIN, r);
analogWrite(G_PIN, g);
analogWrite(B_PIN, b);
}
}
void setup() {
Serial.begin(115200);
pinMode(R_PIN, OUTPUT);
pinMode(G_PIN, OUTPUT);
pinMode(B_PIN, OUTPUT);
// 시작 OFF
setColor(0, 0, 0);
IrReceiver.begin(IR_PIN, DISABLE_LED_FEEDBACK);
Serial.println(F("READY"));
}
void loop() {
while (IrReceiver.decode()) {
IRData d = IrReceiver.decodedIRData;
IrReceiver.resume();
if (d.protocol == UNKNOWN) continue;
if (d.flags & IRDATA_FLAGS_IS_REPEAT) continue;
if (d.command == 0x0000) continue;
uint32_t now = millis();
if (d.command == lastCmd && (now - lastTime) < DEBOUNCE_MS) continue;
lastCmd = d.command; lastTime = now;
// 색상 (RGB값 조정으로 원하는 색상으로 조절 해보세요~)
switch (d.command) {
// 숫자키
case CMD_NUM0: setColor(0, 0, 0); Serial.println(F("→ 0 OFF")); break;
case CMD_NUM1: setColor(255, 0, 0); Serial.println(F("→ 1 RED")); break;
case CMD_NUM2: setColor(0, 255, 0); Serial.println(F("→ 2 GREEN")); break;
case CMD_NUM3: setColor(0, 0, 255); Serial.println(F("→ 3 BLUE")); break;
case CMD_NUM4: setColor(255, 255, 0); Serial.println(F("→ 4 YELLOW")); break;
case CMD_NUM5: setColor(0, 255, 255); Serial.println(F("→ 5 CYAN")); break;
case CMD_NUM6: setColor(255, 0, 255); Serial.println(F("→ 6 MAGENTA")); break;
case CMD_NUM7: setColor(255, 128, 0); Serial.println(F("→ 7 ORANGE")); break;
case CMD_NUM8: setColor(128, 0, 255); Serial.println(F("→ 8 PURPLE")); break;
case CMD_NUM9: setColor(255, 255, 255); Serial.println(F("→ 9 WHITE")); break;
// 채널 키
case CMD_CHM: setColor(50, 50, 50); Serial.println(F("→ CH- GRAY")); break;
case CMD_CH: setColor(0, 80, 120); Serial.println(F("→ CH TEAL")); break;
case CMD_CHP: setColor(255, 128, 0); Serial.println(F("→ CH+ ORANGE")); break;
// 탐색/재생 키
case CMD_PREV: setColor(120, 0, 60); Serial.println(F("→ PREV PLUM")); break;
case CMD_NEXT: setColor(0, 120, 0); Serial.println(F("→ NEXT GREEN")); break;
case CMD_PLAY: setColor(200, 200, 200); Serial.println(F("→ PLAY LIGHT-WHITE")); break;
// 볼륨 키(밝기 대신 고정색 지정)
case CMD_VOLM: setColor(150, 0, 0); Serial.println(F("→ VOL- DARK-RED")); break;
case CMD_VOLP: setColor(0, 200, 80); Serial.println(F("→ VOL+ LIME")); break;
// 기타
case CMD_EQ: setColor(0, 100, 200); Serial.println(F("→ EQ AZURE")); break;
case CMD_100P: setColor(30, 30, 30); Serial.println(F("→ 100+ DARK-GRAY")); break;
case CMD_200P: setColor(90, 90, 90); Serial.println(F("→ 200+ GRAY")); break;
default:
// 알 수 없는 키는 무시
Serial.print(F("UNMAPPED: 0x")); Serial.println(d.command, HEX);
break;
}
}
}
(주)인투피온
대표:소영삼 사업자등록번호:113-86-29364 [사업자정보확인] 통신판매신고:2015-서울구로-1028
본사 : 서울 구로구 경인로 53길 90 STX W-Tower 1307호
매장 : 서울 구로구 경인로 53길 15 중앙유통단지 가동 3101호
고객상담 팩스번호: 02-6124-4242 이메일: info@intopion.com
* 재고 확인, 배송, 기술문의는 바로 답변이 어려우니, 가급적 카카오톡 플러스친구 [인투피온] 이용 부탁드립니다 *
개인정보관리책임자 : 이성민 / Hosting Provider : ㈜가비아씨엔에스