반응형

만능 리모컨을 만들기로 해놓고 정말 많은 시간이 흘렀습니다.

2019.11.10 - [DIY/Arduino] - [DIY] 아두이노로 만능 (통합) 리모콘 만들기 1/3

2019.11.10 - [DIY/Arduino] - [DIY] 아두이노로 통합(만능) 리모콘 만들기 2/3

2020.06.17 - [DIY/Arduino] - [DIY] 아두이노로 통합(만능) 리모콘 만들기 3/3

결국 이번에도 완성되지 못한채 프로젝트가 끝나는것이 안타까워 마무리를 해보기로 합니다.

(리모컨 신호 따기, 각 기능별 동작 확인하는 과정 등은 위 링크의 글을 참고해 주세요)

사실 로직도 다 만들었고 테스트도 어느정도 완료 했으니 하드웨어만 만들면 되는데요, 항상 그렇지만 적당한 하드웨어를 구성하는 것이 쉬운일은 아닙니다. 3D 프린터가 있긴 하지만 완전한 완성품을 만드는게 쉽지 않더군요.

저처럼 DIY 를 하는 경우에는 개조에 적당한 다른 하드웨어를 가지고 튜닝을 하는게 더 쉽고 완성도도 높다 보니 적당한 녀석을 찾는 것이 일이었습니다.

 

그러던 와중!

완전 적당한 녀석을 발견했지 뭡니까.

바로 알리에서 구입한 18650 배터리를 이용한 파워뱅크 케이스 입니다. 병렬로 2개의 18650 배터리가 들어가게 되는데 그 중 하나를 넣지 않아도 정상 동작하기에 다른 한쪽에 아두이노 나노와 필요한 부품을 넣으면 되겠다 싶더군요.

 

그냥 이전에 만들었던거 집어 치우고 새로 만들겁니다.

 

바로 작업에 들어갑니다.

아래 사진처럼 납작한 택트 스위치를 덮개 위에 얹으면 될 것 같았습니다.

파워뱅크 케이스 위에 택트 스위치를 배열해본 모습

음.. 그럴싸 하군요.

하지만 작업의 편의성을 위해 만능 기판 위에 올리기로 합니다.

만능기판 위에 올린 모습

네.. 요게 더 작업이 수월할 것 같군요.

요렇게 가기로 합니다.

표면에 스위치가 그대로 노출되면 예쁘지 않으니 덮개를 만들어야 겠습니다.

잽싸게 3D 모델링을 한 다음 바로 3D 프린터로 프린트 해 봅니다.

3D 프린터로 덮개를 출력중임

 

만능 기판 위에 덮어본 모습

네.. 잘 맞는 군요. (몇차례 수정이 있었습니다)

 

 

그럼 이제 만능 기판위에 스위치와 인디케이터용 LED 를 납땜해 봅니다.

양면으로 사용가능한 만능 기판이므로 위쪽에 버튼과 LED 를 모두 붙여 준 뒤 아래 쪽에서 실제 배선을 하기로 합니다.

지금 보이는 모든 점퍼 선은 그라운드에 연결할 예정이에요. 

부품 장착 및 윗면 배선을 모두 마친 모습
인디케이터용으로 작은 SMD LED 를 장착했다.

그리고 인디케이터 용으로 LED 를 장착 했는데요, 위쪽에 보이는 4개는 각각 제가 선택한 제품을 표시하도록 하고 아래쪽 한개는 동작 할 때마다 신호가 나가는지 확인하기 위한 용도로 사용하기로 하였습니다.

워낙 SMD 부품이 작아 삐뚤빼뚤 하긴 하지만 뭐 큰 문제는 없습니다.

 

버튼의 위치와 버튼별 기능 목록

실제 버튼별 기능 목록과 각 기능별로 전달될 신호는 위와 같습니다.

 

아래쪽에서 본 버튼별 위치

 

뒷면에서 보면 위와 같은 모양으로 버튼들이 배치되어 있습니다. 헷갈리지 않도록 저렇게 만들어 놓고 배선을 시작하기로 합니다.

 

반응형

 

이제 실제 아두이노와 연결을 해야 겠죠?

파워뱅크 덮개 중앙을 뚫어 배선이 내부로 들어갈 수 있도록 해 주었고요,

제작한 기판이 올라갈 위치에 맞게 구멍을 뚫어 주었다.

안쪽에 아두이노 나노를 넣어서 문제 없이 장착이 될 지 확인해 봅니다.

기판과 덮개를 덮어 본 모습

네.. 아주 딱 맞아 떨어집니다.

이제 살인적인 납땜이 남았군요.

 

 

배선 시작 

..

분노의 땜질 시작!!!!

..

 

 

 

네.

끝냈습니다.

살인적인 케이블 들..
아래쪽에는 나노의 USB 포트를 노출시켰다.

 

.

.

 

 

네.. 아두이노의 거의 모든 포트와 연결이 되어있기 때문에 정말 힘들었습니다.

신호를 전달 하는 케이블은 사용하지 않는 랜선 내부의 케이블을 이용해서 연결해 주었습니다.

그리고 아두이노 나노의 USB 연결 포트를 노출 시켜서 나중에라도 프로그래밍을 손쉽게 변경할 수 있도록 했고요, 구석쪽으로 IR LED 를 꺼내주었습니다.

 

배터리를 넣고 동작이 되는지 테스트 해보았습니다.

일단 불은 들어오는 것 확인

 

네 일단 동작은 되는 것 같군요.

TV 에 와서 동작하는지도 확인해 보았고,, 약간의 코드 수정이 필요해 보이는 것을 제외하면 버튼들은 모두 동작하는 것을 확인했습니다.

 

 

그리고 단순히 리모컨으로써의 기능 뿐만 아니라 간단한 플래쉬와 레이저 포인터 기능도 동작하도록 할 생각입니다.

리모컨은 항상 거실의 중심에 있으니 플래쉬가 필요할 때도 빠르게 찾아 사용할 수 있을 것입니다.

 

최종 마무리가 된 모습은 아래와 같습니다.

좌측 하단에 1W LED 를 넣어주고 아래쪽으로 푸쉬락 기능이 있는 스위치를 하나 달아 주었고요,

좌측 위쪽으로는 레이저 다이오드를 넣은뒤 택트 스위치를 연결해주었습니다.

배터리에서 아두이노로 전원을 공급하기 위해 5V 승압 보드를 연결해서 전원 공급을 해주게 됩니다. 물론 스압 보드와 배터리 사이에 푸쉬락 기능이 있는 스위치를 하나 달아 주었습니다.

 

이렇게 하면 일반 USB 충전기를 이용해서 리모컨을 충전할 수 있으며 만약 배터리가 방전되어 교체가 필요하더라도 18650 배터리만 교체하면 되므로 사용성이나 유지보수도 용이한 구성이 되겠습니다.

 

 

 

UI 디자인 올리기

이제 슬슬 마무리를 해야하는데요,

어떤 버튼이 어떤 동작을 하는지 알아야 하지 않겠습니까? 그래서 전면부 UI 디자인을 해보았습니다.

이래뵈도 디자이너 아뉘겠습니까?

리모컨에 사용될 UI 작업 중

일러스트로 버튼의 위치에 맞게 UI 를 그려보았습니다.

좌측에 뒤집혀 있는 그림은 뭘까요?

조금뒤에 알려드리겠습니다.

일단 프린트해서 크기와 위치, 배치 등이 적당한지 확인해 봅니다.

버튼의 위치와 크기 확인 중

또 실제 버튼의 모양, 위치, 기능이 모두 정상 동작하는지 최종 확인을 해봅니다.

 

그럼 이제 OHP 필름을 꺼내 프린트를 다시 합니다!

네. 바로 OHP 필름입니다.

OHP 필름에 뒤집힌 그래픽이 출력되었다.

 

자 OHP 필름에도 출력이 잘 되었습니다.

그럼 출력된 면에 

영일 락카 등장

띠용~ 락카가 등장했네요.

 

네 출력된 면에 백색 락카를 칠해주면 

OHP 필름 출력면에 락카 칠 하는 중

 

칠해주면~

 

그리고 뒤집으면 ~ 

 

쨔쟌~

 

요렇게 반짝 반짝 하는 예쁜 그래픽을 볼 수 있답니다. 손으로 눌르거나 해도 지워질 염려가 없지요.

요렇게 만들어진 전면부를 제작한 리모컨 위에 똭 붙여 주면

완 to the 성!

완성된 아두이노 만능리모컨

오예~

완성 되었습니다.

 

사실 처음 계획이랑 전원 스위치 와 제품 변경 기능이 뒤바뀌긴 했지만 뭐 괜찮습니다.

 

부가기능들을 볼까요? 

플래쉬 동작!
레이저 포인터 동작!

오~예! 오~ 예!

모두 잘 동작 합니다. ㅋㅋ

 

며칠에 한번씩 배터리 방전을 막기 위해 핸드폰 충전기로 배터리를 충전해 주면 끝

충전 중인 만능 리모컨

 

네.. 이렇게 마무리가 되었습니다.

 

어휴 생각보다 힘들었지만 이제 거실 테이블 위에 널브러져 있는 리모컨들을 치울 수 있다고 생각하니 후련 합니다.

 

끝으로 최종으로 적용한 아두이노 소스코드를 아래에 올립니다.

상당히 긴 코드가 되어 버렸네요. 

더보기
#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>
#include <EEPROM.h>
/*
 * IRremote: IRsendDemo - demonstrates sending IR codes with IRsend
 * An IR LED must be connected to Arduino PWM pin 3.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */
/*
 * tv (NEC)
 * power :      0x2DF10EF, 32
 * input :      0x2DFD02F, 32
 * chnnel up :  0x2DF00FF, 32
 * chnnel dn :  0x2DF807F, 32
 * volumn up :  0x2DF40BF, 32
 * volumn dn :  0x2DFC03F, 32
 * OK :         0x2DF22DD, 32
 * sw up :      0x2DF02FD, 32
 * sw dn :      0x2DF827D, 32
 * sw left :    0x2DFE01F, 32
 * sw right :   0x2DF609F, 32
 * 
 * android tv (NEC)
 * power :      0x807F02FD, 32
 * sw up :      0x807F6897, 32
 * sw dn :      0x807F58A7, 32
 * sw left :    0x807F8A75, 32
 * sw right :   0x807F0AF5, 32
 * sw OK :      0x807FC837, 32
 * back :       0x807F9867, 32
 * volumn up :  0x807F18E7, 32
 * volumn dn :  0x807F08F7, 32
 * 
 * 
 * lonpoo speaker
 * power :      0x40BF807F, 32
 * volumn up :  0x40BF50AF, 32
 * volumn dn :  0x40BFD02F, 32
 * bt :         0x40BFA05F, 32
 * bt esc :     0x40BF906F, 32
 * opt :        0x40BF20DF, 32
 * 
 * 
 * LED
 * tv :     9
 * tv box : 10
 * btv :    11
 * spk :    12
 * 
 * input
 * s01 
 * 
 * 
 * 
 * 
 */

#include <IRremote.h>

const int s01 = 0;
const int s02 = 18;   // select sw 
const int s03 = 1;
const int s04 = 2;
const int s05 = 19;
const int s06 = 4;
const int s07 = 5;
const int s08 = 6;
const int s09 = 7;
const int s10 = 8;
const int s11 = 14;
const int s12 = 15;
const int s13 = 16;
const int s14 = 17;
//LED
const int L00 = 9;    // TV
const int L01 = 10;   // TV BOX
const int L02 = 11;   // BTV
const int L03 = 12;   // LONPOO SPEAKER

//
// define sw value
int sw_01;
int sw_02;
int sw_03;
int sw_04;
int sw_05;
int sw_06;
int sw_07;
int sw_08;
int sw_09;
int sw_10;
int sw_11;
int sw_12;
int sw_13;
int sw_14;

bool canWorking_01 = true;
bool canWorking_02 = true;
bool canWorking_03 = true;
bool canWorking_04 = true;
bool canWorking_05 = true;
bool canWorking_06 = true;
bool canWorking_07 = true;
bool canWorking_08 = true;
bool canWorking_09 = true;
bool canWorking_10 = true;
bool canWorking_11 = true;
bool canWorking_12 = true;
bool canWorking_13 = true;
bool canWorking_14 = true;
// 
int productIdx = 0; //0 : TV / 1: TV BOX / 2: BTV / 3: SPK

int addr = 0;
bool chkon = false;
IRsend irsend;

void setup()
{
  pinMode(s01, INPUT_PULLUP);
  pinMode(s02, INPUT_PULLUP);
  pinMode(s03, INPUT_PULLUP);
  pinMode(s04, INPUT_PULLUP);
  pinMode(s05, INPUT_PULLUP);
  pinMode(s06, INPUT_PULLUP);
  pinMode(s07, INPUT_PULLUP);
  pinMode(s08, INPUT_PULLUP);
  pinMode(s09, INPUT_PULLUP);
  pinMode(s10, INPUT_PULLUP);
  pinMode(s11, INPUT_PULLUP);
  pinMode(s12, INPUT_PULLUP);
  pinMode(s13, INPUT_PULLUP);
  pinMode(s14, INPUT_PULLUP);
  
  pinMode(L00, OUTPUT);
  pinMode(L01, OUTPUT);
  pinMode(L02, OUTPUT);
  pinMode(L03, OUTPUT);
  
  pinMode(13, OUTPUT);
  //EEPROM.write(0, productIdx);  
  productIdx = EEPROM.read(0);

  sw_01 = HIGH;
  sw_02 = HIGH;
  sw_03 = HIGH;
  sw_04 = HIGH;
  sw_05 = HIGH;
  sw_06 = HIGH;
  sw_07 = HIGH;
  sw_08 = HIGH;
  sw_09 = HIGH;
  sw_10 = HIGH;
  sw_11 = HIGH;
  sw_12 = HIGH;
  sw_13 = HIGH;
  sw_14 = HIGH;
  
  canWorking_01 = true;
  canWorking_02 = true;
  canWorking_03 = true;
  canWorking_04 = true;
  canWorking_05 = true;
  canWorking_06 = true;
  canWorking_07 = true;
  canWorking_08 = true;
  canWorking_09 = true;
  canWorking_10 = true;
  canWorking_11 = true;
  canWorking_12 = true;
  canWorking_13 = true;
  canWorking_14 = true;

  Serial.begin(9600);
  Serial.println(productIdx);

  
}

void loop() {

  digitalWrite(13, LOW);
  
  sw_01 = digitalRead(s01);
  sw_02 = digitalRead(s02);
  sw_03 = digitalRead(s03);
  sw_04 = digitalRead(s04);
  sw_05 = digitalRead(s05);
  sw_06 = digitalRead(s06);
  sw_07 = digitalRead(s07);
  sw_08 = digitalRead(s08);
  sw_09 = digitalRead(s09);
  sw_10 = digitalRead(s10);
  sw_11 = digitalRead(s11);
  sw_12 = digitalRead(s12);
  sw_13 = digitalRead(s13);
  sw_14 = digitalRead(s14);
  

  // change product
  if (sw_02 == HIGH) {
    chkon = true;
    ledON(productIdx);
  }else{
    if (chkon)
    {
      productIdx++;
      if (productIdx > 3) productIdx = 0;
      EEPROM.write(0, productIdx);
      chkon = false;
    }
    ledON(productIdx);
  }
  
  if (sw_01 == HIGH) {    
    canWorking_01 = true;
  }else{
    digitalWrite(13, HIGH);
    if (canWorking_01)
    {
      press_S01(productIdx);
      canWorking_01 = false;
    }
  }
  if (sw_03 == HIGH) {   
    canWorking_03 = true; 
  }else{
    digitalWrite(13, HIGH);
    if (canWorking_03)
    {
      press_S03(productIdx);
      canWorking_03 = false;
    }
  }
  if (sw_04 == HIGH) {
    canWorking_04 = true;     
  }else{
    digitalWrite(13, HIGH);
    if (canWorking_04)
    {
      press_S04(productIdx);
      canWorking_04 = false;
    }
  }
  if (sw_05 == HIGH) {  
    canWorking_05 = true;    
  }else{
    digitalWrite(13, HIGH);
    if (canWorking_05)
    {
      press_S05(productIdx);
      canWorking_05 = false;
    }
  }
  if (sw_06 == HIGH) {    
    canWorking_06 = true;  
  }else{
    digitalWrite(13, HIGH);
    if (canWorking_06)
    {
      press_S06(productIdx);
      canWorking_06 = false;
    }
  }
  if (sw_07 == HIGH) {  
    canWorking_07 = true;    
  }else{
    digitalWrite(13, HIGH);
    if (canWorking_07)
    {
      press_S07(productIdx);
      canWorking_07 = false;
    }
  }
  if (sw_08 == HIGH) {    
    canWorking_08 = true; 
  }else{
    digitalWrite(13, HIGH);
    if (canWorking_08)
    {
      press_S08(productIdx);
      canWorking_08 = false;
    }
  }
  if (sw_09 == HIGH) {  
    canWorking_09 = true;   
  }else{
    digitalWrite(13, HIGH);
    if (canWorking_09)
    {
      press_S09(productIdx);
      canWorking_09 = false;
    }
  }
  if (sw_10 == HIGH) {    
    canWorking_10 = true;   
  }else{
    digitalWrite(13, HIGH);
    if (canWorking_10)
    {
      press_S10(productIdx);
      canWorking_10 = false;
    }
  }
  if (sw_11 == HIGH) {    
    canWorking_11 = true;   
  }else{
    digitalWrite(13, HIGH);
    if (canWorking_11)
    {
      press_S11(productIdx);
      canWorking_11 = false;
    }
  }
  if (sw_12 == HIGH) {    
    canWorking_12 = true;  
  }else{
    digitalWrite(13, HIGH);
    if (canWorking_12)
    {
      press_S12(productIdx);
      canWorking_12 = false;
    }
  }
  if (sw_13 == HIGH) {    
    canWorking_13 = true;  
  }else{
    digitalWrite(13, HIGH);
    if (canWorking_13)
    {
      press_S13(productIdx);
      canWorking_13 = false;
    }
  }
  if (sw_14 == HIGH) {    
    canWorking_14 = true;  
  }else{
    digitalWrite(13, HIGH);
    if (canWorking_14)
    {
      press_S14(productIdx);
      canWorking_14 = false;
    }
  }

	delay(10); //5 second delay between each signal burst
}

void press_S14 (int idx) // vol -
{
  switch (idx) {
  case 0:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x2DFC03F,32);   // tv vol -
    break;
  case 1:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x807F06F9,32);  // tv box vol -
    break;
  case 2:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x1FE42BD,32);  // BTV box vol -
    break;
  case 3:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x40BFD02F,32);  //  spk vol -
    break;
  default:
    // statements
    break;
  }
}

void press_S13 (int idx) // chnl -
{
  switch (idx) {
  case 0:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x2DF807F,32);   // tv chnl -
    break;
  case 1:
    //for (int i = 0; i < 1; i++) irsend.sendNEC(0x807F18E7,32);  // tv box vol +
    break;
  case 2:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x1FE827D,32);   // Btv chnl -
    break;
  case 3:
    //for (int i = 0; i < 1; i++) irsend.sendNEC(0x40BF50AF,32);  //  spk vol +
    break;
  default:
    // statements
    break;
  }
}

void press_S12 (int idx) //vol +
{
  switch (idx) {
  case 0:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x2DF40BF,32);   // tv vol +
    break;
  case 1:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x807F18E7,32);  // tv box vol +
    break;
  case 2:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x1FEC23D,32);   // Btv vol +
    break;
  case 3:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x40BF50AF,32);  //  spk vol +
    break;
  default:
    // statements
    break;
  }
}

void press_S11 (int idx) // chnl +
{
  switch (idx) {
  case 0:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x2DF00FF,32);   // tv chnl +
    break;
  case 1:
    //for (int i = 0; i < 1; i++) irsend.sendNEC(0x807F58A7,32);  // tv box
    break;
  case 2:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x1FE02FD,32);   // Btv chnl +
    break;
  case 3:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x40BF906F,32);  //  spk bt esc
    break;
  default:
    // statements
    break;
  }
}

void press_S10 (int idx) // down
{
  switch (idx) {
  case 0:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x2DF827D,32);   // tv down
    break;
  case 1:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x807F58A7,32);  // tv box down 
    break;
  case 2:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x1FE52AD,32);   // Btv down
    break;
  case 3:
    //for (int i = 0; i < 1; i++) irsend.sendNEC(0x40BF20DF,32);  //  
    break;
  default:
    // statements
    break;
  }
}

void press_S09 (int idx) // right
{
  switch (idx) {
  case 0:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x2DF609F,32);   // tv right
    break;
  case 1:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x807F0AF5,32);  // tv box right 
    break;
  case 2:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x1FE32CD,32);   // Btv right
    break;
  case 3:
    //for (int i = 0; i < 1; i++) irsend.sendNEC(0x40BF20DF,32);  // tv box up 
    break;
  default:
    // statements
    break;
  }
}
void press_S08 (int idx) // ok
{
  switch (idx) {
  case 0:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x2DF22DD,32);   // tv ok
    break;
  case 1:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x807FC837,32);  // tv box ok 
    break;
  case 2:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x1FE629D,32);   // Btv ok
    break;
  case 3:
    //for (int i = 0; i < 1; i++) irsend.sendNEC(0x40BF20DF,32);  // tv box up 
    break;
  default:
    // statements
    break;
  }
}

void press_S07 (int idx) // arrow left
{
  switch (idx) {
  case 0:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x2DFE01F,32);   // tv left
    break;
  case 1:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x807F8A75,32);  // tv box left 
    break;
  case 2:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x1FED22D,32);   // Btv left
    break;
  case 3:
    //for (int i = 0; i < 1; i++) irsend.sendNEC(0x40BF20DF,32);  // tv box up 
    break;
  default:
    // statements
    break;
  }
}
void press_S06 (int idx)
{
  switch (idx) {
  case 0:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x2DF02FD,32);   // tv back
    break;
  case 1:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x807F9867,32);  // tv box back 
    break;
  case 2:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x1FE728D,32);   // Btv back
    break;
  case 3:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x40BF20DF,32);  // spk OPT 
    break;
  default:
    // statements
    break;
  }
}

void press_S05 (int idx) // arrow up
{
  switch (idx) {
  case 0:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x2DF02FD,32);   // tv up
    break;
  case 1:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x807F6897,32);  // tv box up 
    break;
  case 2:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x1FE926D,32);   // Btv up
    break;
  case 3:
    //irsend.sendNEC(0x40BFA05F,32);  
    break;
  default:
    // statements
    break;
  }
}

void press_S04 (int idx)
{
  switch (idx) {
  case 0:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x2DFD02F,32);   //외부입력
    break;
  case 1:
    //for (int i = 0; i < 1; i++) irsend.sendNEC(0x2DF10EF,32);   
    break;
  case 2:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x1FE40BF,32);   // Btv home
    break;
  case 3:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x40BFA05F,32);   // blue tooth
    break;
  default:
    // statements
    break;
  }
}

void press_S03 (int idx) // power
{

  irsend.sendNEC(0x2DFD02F,32); // tv 외부입력
  // S03 번은 편의를 위해 항상 외부입력으로 동작한다
  /*
  switch (idx) {
  case 0:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x2DF10EF,32);   // tv power
    break;
  case 1:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x807F02FD,32);   // tv box power
    break;
  case 2:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x1FE807F,32);   // Btv power1 
    break;
  case 3:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x40BF807F,32);   
    break;
  default:
    // statements
    break;
  }*/
}
void press_S01 (int idx) //  S01
{
  Serial.println(productIdx);
  switch (idx) {
  case 0:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x2DF10EF,32);   
    break;
  case 1:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x807F02FD,32);   
    break;
  case 2:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x1FE807F,32);   
    break;
  case 3:
    for (int i = 0; i < 1; i++) irsend.sendNEC(0x40BF807F,32);   
    break;
  default:
    // statements
    break;
  }
}
void ledON (int idx)
{
  digitalWrite(L00, LOW);
  digitalWrite(L01, LOW);
  digitalWrite(L02, LOW);
  digitalWrite(L03, LOW);
  switch (idx) {
  case 0:
    digitalWrite(L00, HIGH);
    break;
  case 1:
    digitalWrite(L01, HIGH);
    break;
  case 2:
    digitalWrite(L02, HIGH);
    break;
  case 3:
    digitalWrite(L03, HIGH);
    break;
  default:
    // statements
    break;
  }
}

 

 

이상으로 아두이노 만능 리모컨 만들기를 마칩니다. 

 

반응형

+ Recent posts