[아두이노] 적외선 통신

mj·2021년 10월 16일
0

아두이노

목록 보기
4/5

1. 적외선 통신

1-1. 버튼에 대한 16진수 값 알기

//적외선 통신을 하기 위한 라이브러리
#include <IRremote.h>

IRrecv ir1(11);//적외선 센서가 연결된 디지털 핀 번호 매핑
decode_results results; //수신된 적외선 신호를 저장할 변수

void setup()
{
  ir1.enableIRIn(); //적외선 센서 활성화
  Serial.begin(9600); //시리얼객체 초기화
}

void loop()
{
  if(ir1.decode(&results)){ //전송되는 값이 0이 아니라면
    Serial.println(results.value, HEX); //16진수 형태로 출력
    delay(30); //0.03초 딜레이
    ir1.resume();
  }
    
}

실행결과 : 리모컨을 누를 때 마다 시리얼 모니터에 16진수 값이 출력된다.




1-2. 리모컨을 이용한 LED켜기

//실행결과 : EQ버튼을 누르면 LED가 켜지고 다른 버튼을 누르면 LED가 꺼진다. 
//(LED가 잠깐 켜졌다 꺼지는거 아님. 계속 켜져있거나 꺼져있는 상태를 유지)

//적외선 통신을 하기 위한 라이브러리
#include <IRremote.h>

IRrecv ir1(11);//적외선 센서가 연결된 디지털 핀 번호 매핑
decode_results results; //수신된 적외선 신호를 저장할 변수

void setup()
{
  ir1.enableIRIn(); //적외선 센서 활성화
  Serial.begin(9600); //시리얼객체 초기화
  pinMode(12, OUTPUT);
}

void loop()
{
  if(ir1.decode(&results)){ //전송되는 값이 0이 아니라면
    Serial.println(results.value, HEX); //16진수 형태로 출력
    
    if(results.value == 0xFDB04F){ //리모컨의 EQ버튼을 누르면
      digitalWrite(12, HIGH); //LED on
    }
    else{ //EQ버튼 외의 다른 버튼 누르면 
      digitalWrite(12, LOW); //LED off
    }
    
    delay(30); //0.03초 딜레이
    ir1.resume();
  }
    
}


1-3. 3색 LED (LED RGB) 이용해보기

  • 디지털 핀에 연결한 버전
//실행결과 : 0버튼을 누르면 빨강과 파랑이 섞여 자주색의 빛이 켜진다.

//적외선 통신을 하기 위한 라이브러리
#include <IRremote.h>

IRrecv ir1(11);//적외선 센서가 연결된 디지털 핀 번호 매핑
decode_results results; //수신된 적외선 신호를 저장할 변수

void setup()
{
  ir1.enableIRIn(); //적외선 센서 활성화
  Serial.begin(9600); //시리얼객체 초기화
  pinMode(12, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(2, OUTPUT);
}

void loop()
{
  if(ir1.decode(&results)){ //전송되는 값이 0이 아니라면
    Serial.println(results.value, HEX); //16진수 형태로 출력
    
    if(results.value == 0xFDB04F){ //리모컨의 EQ버튼을 누르면
      digitalWrite(12, HIGH); //LED on
    }
    else{ //EQ버튼 외의 다른 버튼 누르면 
      digitalWrite(12, LOW); //LED off
    }
    
    
    if(results.value == 0xFD30CF){ //0버튼이 눌렸을 경우
      digitalWrite(8, HIGH); //빨강
      digitalWrite(7, HIGH); //파랑
      digitalWrite(2, LOW); //초록
    }
    
    delay(30); //0.03초 딜레이
    ir1.resume();
  }
    
}

- 디지털 핀을 사용하게 되면 아날로그 신호보다 적은 색상표가 완성된다.
- 좀 더 다양한 색을 표현하고 싶으면 아날로그 신호를 사용해야 한다.
- PWM을 지원하는 디지털 핀을 사용하면 더 다양한 색상의 LED불빛을 만들 수 있다.


  • 아날로그 핀에 연결한 버전
//적외선 통신을 하기 위한 라이브러리
#include <IRremote.h>

IRrecv ir1(11);//적외선 센서가 연결된 디지털 핀 번호 매핑
decode_results results; //수신된 적외선 신호를 저장할 변수

void setup()
{
  ir1.enableIRIn(); //적외선 센서 활성화
  Serial.begin(9600); //시리얼객체 초기화
  pinMode(12, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
}

void loop()
{
  if(ir1.decode(&results)){ //전송되는 값이 0이 아니라면
    Serial.println(results.value, HEX); //16진수 형태로 출력
    
    if(results.value == 0xFDB04F){ //리모컨의 EQ버튼을 누르면
      digitalWrite(12, HIGH); //LED on
    }
    else{ //EQ버튼 외의 다른 버튼 누르면 
      digitalWrite(12, LOW); //LED off
    }
    
    
    if(results.value == 0xFD30CF){ //0버튼이 눌렸을 경우
      analogWrite(9, 120); //빨강
      analogWrite(6, 30); //파랑
      analogWrite(5, 180); //초록
    }
    //디지털 핀을 사용하게 되면 아날로그 신호보다 적은 색상표가 완성된다.
    //좀 더 다양한 색을 표현하고 싶으면 아날로그 신호를 이용해야 한다.
    
    delay(30); //0.03초 딜레이
    ir1.resume();
  }
    
}
profile
일단 할 수 있는걸 하자.

0개의 댓글

관련 채용 정보