본문 바로가기

직접 만든 소프트웨어

아두이노 IR 리모콘 송신 코드 재작성

반응형

기존 포스팅했던 IR 송수신 코드를 사용해서 리모콘을 만드려고 했습니다.

리모콘 IR신호 수신기 및 송신기 코드 (choogo.net)

 

리모콘 IR신호 수신기 및 송신기 코드

저희 집에는 꺼내놓고 사용하는 리모콘이 너무 많습니다. 주로 사용하는 리모콘을 나열해보자면, 티비, 미박스, 사운드바, 빔프로젝터 정도가 됩니다. 리모콘이 너무 많으니 관리도 어렵고 사용

www.choogo.net

기존에 리모콘 제작을 중단했던 이유는 IR신호가 너무 약하고 발신각도가 좁았던 문제의 해결이 안되서 였는데, 고휘도 IR LED와 트랜지스터를 사용해서 해결했습니다. 

 

문제는;;

예전 코드 작성시 사용했던 라이브러리 버전도 기억이 안나고..

그때 잘 되던게 지금 잘 안되길래..

 

다시 코드 정리를 했습니다.

물론 라이브러리 기본 예제코드와 구글신의 도움으로 참조한 코드들을 이것저것 저에게 맞게 짜깁은 코드들입니다.

단순하게 몇가지 신호를 반복하는 코드인데 특이할만한 부분은 디코딩 비트 신호와 로우데이터 신호를 번갈아 발신하는 코드로서 경우에 따라서 비트신호와 로우데이터 신호를 필요에 따라 사용하면 됩니다.

 

#include <Arduino.h>
#include "PinDefinitionsAndMore.h" // Define macros for input and output pin etc.
#include <IRremote.hpp> //IRREMOTE 3.9.0 라이브러리 사용

uint16_t sAddress = 0x2C2C;
uint8_t sCommand = 0x17;
uint8_t sRepeats = 0;

const uint16_t upData[] = { 4480, 4420, 530, 570, 530, 620, 530, 1670, 530, 1670, 530, 570, 530, 1720, 430, 670, 530, 570, 530, 570, 530, 570, 530, 1720, 430, 1770, 480, 620, 480, 1770, 430, 670, 430, 670, 430, 670, 480, 1720, 480, 1770, 430, 670, 430, 1770, 480, 620, 480, 620, 480, 670, 430, 1770, 430, 670, 480, 620, 480, 1770, 430, 670, 430, 1770, 480, 1720, 480, 1770, 480 }; // Using exact NEC timing
const uint16_t downData[] = { 4430, 4470, 530, 620, 530, 570, 530, 1670, 530, 1670, 530, 570, 530, 1720, 480, 620, 530, 570, 530, 570, 530, 570, 580, 1670, 480, 1720, 530, 570, 530, 1720, 530, 570, 530, 570, 580, 1620, 530, 1720, 530, 1670, 530, 570, 530, 1670, 530, 620, 480, 620, 480, 620, 530, 570, 530, 570, 530, 570, 580, 1670, 530, 570, 530, 1670, 530, 1720, 480, 1720, 530 }; // Using exact NEC timing

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(115200);
  IrSender.begin(); // Start with IR_SEND_PIN as send pin and enable feedback LED at default feedback LED pin
  Serial.println(F("Ready to send IR signals at pin "  STR(IR_SEND_PIN)));
}

void loop() {
  IrSender.sendRaw(upData, sizeof(upData) / sizeof(upData[0]), NEC_KHZ); // Note the approach used to automatically calculate the size of the array.
  delay(2000); // delay must be greater than 5 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal
  IrSender.sendRaw(downData, sizeof(downData) / sizeof(downData[0]), NEC_KHZ); // Note the approach used to automatically calculate the size of the array.
  delay(2000); // delay must be greater than 5 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal
  IrSender.sendSamsung(sAddress, 0x17, sRepeats);
  delay(2000);  // delay must be greater than 5 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal
  IrSender.sendSamsung(sAddress, 0x16, sRepeats);
  delay(2000);  // delay must be greater than 5 ms (RECORD_GAP_MICROS), otherwise the receiver sees it as one long signal

}

 

 

 

댓글