안녕하세요...
이제 아두이노 오랜지보드 블루를 사서 처음 접해 보는 사람입니다.
5버튼짜리 IR 리모콘을 이용하여 아래와 같은 기능을 구현 하려 하는데 잘 되지 않아 도움을 요청드립니다.
(리시버 프로그램을 통하여 ir리모콘의 데이터는 알아놨어요)
1. 리모콘 1번키 (case 0x002FD58A7: // Key 0 ) 누르는 동안 아두이노 2번핀 hi
2. 리모콘 2번키 ( case 0x002FD9867: // Key 1 ) 누르는 동안 아두이노 3번핀 hi
3. 리모콘 3번키 ( case 0x002FD18E7: // Key 2 ) 누루는 동안 아두이노 4번핀 hi
4. 리모콘 4번키 ( case 0x002FD807F: // Key 3 ) 누르는 동안 아두이노 5번핀 hi
5. 리모콘 5번키 ( case 0x002FD00FF: // Key 4 ) 한번 누르면 아두이노 6번 hi
6. 리모콘 5번키 ( case 0x002FD00FF: // Key 4 ) 한번 누르면 아두이노 6번 low
7. 리모콘 5번키 ( case 0x002FD00FF: // Key 4 ) 가 hi가 되고 10초동안 5번키가 안들어오면 자동으로 off
* ir sensor는 7번핀에 입력 해놓은 상태입니다.
펌웨어 를처음 접해보는 터라... 인터넷에서 찾아서 이것 저것 해보다, 빠른 시간내에 만들어내야 해서 이렇게 도움 요청드립니다.
==================================================================================================
#include <IRremote.h>
int RECV_PIN = 7; // RECV_PIN핀을 7번으로 설정
//=====================================================
int led1 = 2; //led1을 2번핀으로 설정
int led2 = 3; //led2을 3번핀으로 설정
int led3 = 4; //led3을 4번핀으로 설정
int led4 = 5; //led4을 5번핀으로 설정
int led5 = 6; //led5을 6번핀으로 설정
//==========================================================
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
}
//=======================================================================
{
pinMode(led1,OUTPUT); //LED1핀을 OUTPUT으로 설정
pinMode(led2,OUTPUT); //LED2핀을 OUTPUT으로 설정
pinMode(led3,OUTPUT); //LED3핀을 OUTPUT으로 설정
pinMode(led4,OUTPUT); //LED4핀을 OUTPUT으로 설정
pinMode(led5,OUTPUT); //LED5핀을 OUTPUT으로 설정
pinMode(RECV_PIN,INPUT); // RECV_PIN(7번핀)을 input으로 설정
}
//=========================================================================
void loop()
{
if(digitalRead(RECV_PIN) == 0x002FD58A7)
digitalWrite(led1,HIGH) ; //RECV_PIN 이 0x002FD58A7 일경우 led1은 higt
if(digitalRead(RECV_PIN) == 0x002FD9867)
digitalWrite(led1,HIGH) ; //RECV_PIN 이 0x002FD58A7 일경우 led2은 higt
if(digitalRead(RECV_PIN) == 0x002FD18E7)
digitalWrite(led1,HIGH) ; //RECV_PIN 이 0x002FD58A7 일경우 led3은 higt
if(digitalRead(RECV_PIN) == 0x002FD807F)
digitalWrite(led1,HIGH) ; //RECV_PIN 이 0x002FD58A7 일경우 led4은 higt
if(digitalRead(RECV_PIN) == 0x002FD00FF)
digitalWrite(led1,HIGH) ; //RECV_PIN 이 0x002FD58A7 일경우 led5은 higt
}
else {
digitalWrite(led1,low) //이외의 경우 led1을 꺼라.
digitalWrite(led2,low) //이외의 경우 led2을 꺼라.
digitalWrite(led3,low) //이외의 경우 led3을 꺼라.
digitalWrite(led4,low) //이외의 경우 led4을 꺼라.
digitalWrite(led5,low) //이외의 경우 led5을 꺼라.
}
//===========================================================================
void loop()
{
if(irrecv.decode(&results)){
if(results.decode_type == NEC){
switch(results.value){
case 0x002FD58A7: // Key 0
Serial.println("Press '0'");
break;
case 0x002FD9867: // Key 1
Serial.println("Press '1'");
break;
case 0x002FD18E7: // Key 2
Serial.println("Press '2'");
break;
case 0x002FD807F: // Key 3
Serial.println("Press '3'");
break;
case 0x002FD00FF: // Key 4
Serial.println("Press '4'");
break;
default:
break;
}
}
irrecv.resume();
}
}
===============================================================================
할수있는데 까지는 작성해 봤는데요;;;;
돌아가지 않아요;;;
|
수박쨈 2016-01-22 15:34:16
리모콘 1번키를 누르면 아두이노 2번핀이 HIGH가 되고
리모콘 2번키를 누르면 아두이노 3번핀이 HIGH가 되고 이런식의 코드를 만드시는 건가요?
간단하게 구현해보면 아래와 같은 방법으로 구현하시면 될 듯 합니다.
전부다는 작성안헀고 3번까지만 일단 작성했는데 방법은 똑같으니 else if문만 계속적으로 추가해주시면 될 듯 합니다.
(적외선 수신부가 7번에 꽂혀있다고 가정하고 작성했습니다. 적외선 수신부 데이터 부분은 아래 방법이 아니면 수정해 주시면 될 듯 합니다)
void setup(){
Serial.begin(9600);
pinMode(7, INPUT);
}
void loop() {
long a = analogRead(7);
if(a == 0x002FD58A7) {
digitalWrite(2,HIGH); //1번키가 눌리면 2번핀에 HIGH신호 전달
}
else if(a == 0x002FD9867) {
digitalWrite(3,HIGH); //2번키가 눌리면 3번핀에 HIGH신호 전달
}
else if(a == 0x002FD18E7) {
digitalWrite(4,HIGH); //3번키가 눌리면 4번핀에 HIGH신호 전달
}
근데 7번은 디지털핀인데 7번에 연결해도 저런 숫자데이터가 오는건가요??