메뉴 건너뛰기

XEDITION

아두이노

 

아두이노 IR 리모컨 R 신호 반복문제

 

아두이노 IR 리모컨 R 신호 반복문제 : 지식iN

IR 리모컨을 이용하여 DC 모터를 전진, 정지, 후진 하려합니다.

 

코드를 작성하여 전진, 후진이 작동하는 것 까지는 성공을 하였으나

 

버튼을 한번 누르고 그에 해당하는 동작(전진,후진)이 한 후에는 다른 버튼이 먹지 않고

 

계속 R 값이 반복되는 현상이 있습니다. 버튼을 누를 때마다 그에 해당하는 동작을 하려면 어떻게 해야하나요?

 

------------------------------------------------------------------------------------

 

#include <IRremote.h>
#include <IRremoteInt.h>

 int IN1 =12;
int IN2 =9;

int SPEED =50;
volatile unsigned long time,new_time,old_time; 
volatile unsigned char ir_check=1, IR_start=0;
volatile unsigned long mask=0x00000001, IR_rx_data=0x00000000, IR_code;

void setup()
{
  Serial.begin(9600);
  attachInterrupt(0, IR_remote, FALLING);
 
  pinMode(IN1,OUTPUT);
  pinMode(IN2,OUTPUT);
 
}
void loop()
{
 while(ir_check)
  ir_check=1;

switch (IR_code){

 case(0xF30CFF00):
 digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  analogWrite(3, 255);
  break;
 
  case (0xE718FF00):

  digitalWrite(IN2,HIGH);  //motor stop
  break;
 
  case(0xA15EFF00):
   digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  analogWrite(3, 255);
  break;
}


 
}
void Set_Speed(int input_speed)
{
  SPEED=input_speed;
}
void IR_remote() 
{
  new_time = micros();          // 현재시간 저장
  time=new_time - old_time;   // 엣지 사이의 시간 계산
  old_time=new_time;            // 이전시간을 현재시간으로 갱신
  if(time > 13000 && time <14000) IR_start=1;   // lead code  13.5ms의 리드코드를 확인합니다.
  else if(time > 9000 && time <12000)   // repeat code 일때는 무시 입력은 1번만
  {
    Serial.println("R");      // repeat code 가 들어오면 LCD에 'R' 을 출력합니다.
    IR_start=0;               // 변수 초기화
    mask=0x00000001;
    IR_rx_data=0x00000000;
  }
  else if(IR_start==1)         // 리드코드가 들어 왔다면...
  {
    if(time > 1025 && time < 1225)          // 1.125ms   0을 받습니다.  
    {
      IR_rx_data &= ~mask;
      mask=mask<<1;       // mask를 1비트씩 시프트 하면서 데이터를 쌓습니다.
    }
    else if(time > 2125 && time < 2325)     // 2.25ms   1을 받습니다.
    {    
      IR_rx_data |= mask;
      mask=mask<<1;       // mask를 1비트씩 시프트 하면서 데이터를 쌓습니다.
    }   
               
    if(mask==0)        // mask가 모두 시프트되어 0이되면(32bit data를 모두 받으면.. )
    {      
      IR_code=IR_rx_data;
      Serial.print(IR_code, HEX);  // IR code 값 시리얼로 전송
      Serial.print(" : ");
      Serial.print(IR_code, BIN);
      Serial.println(" ");
// 변수 초기화
      IR_start=0;
      mask=0x00000001;
      IR_rx_data=0x00000000;    
     
      ir_check=0;
    } 
  }
}

 

///////////////

 

아두이노 IR 리모컨 R 신호 반복문제 : 지식iN

IR_code를 switch문에서 사용하여 처리한 후에.. 바로 0으로 초기화해보세요.. 아래처럼하면 잘 동작할거 같은데요

 

switch (IR_code){

 case(0xF30CFF00):
 digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  analogWrite(3, 255);

IR_code=0;
  break;
 
  case (0xE718FF00):

  digitalWrite(IN2,HIGH);  //motor stop

IR_code=0;
  break;
 
  case(0xA15EFF00):
   digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  analogWrite(3, 255);

IR_code=0;
  break;
}

 

번호 제목 글쓴이 날짜 조회 수
공지 IR 리모콘 코드 따기 [1] 묵묵이 2017.02.10 14
공지 rc 카 작업용 [1] 묵묵이 2017.02.07 14
공지 [sketch_mydust] 미세멘지 측정기 작업 용 [2] 묵묵이 2017.02.07 35
23 sprintf2 사용법 묵묵이 2017.02.07 5
22 디지털 온 습도계 사용 DHT22 [2] file 묵묵이 2017.02.06 5
21 미세먼지 측정기 참조 [3] 묵묵이 2017.02.06 5
20 test ir 리모컨 테스트 [1] 묵묵이 2017.01.23 5
19 ir 리모컨 값 기록 묵묵이 2017.01.18 2
» 아두이노 IR 리모컨 R 신호 반복문제 test 묵묵이 2017.01.18 6
17 아두이노 톤함수를 사용하지 않고 부저 소리내기 묵묵이 2017.01.17 1
16 키보드로 멜로디 연주하기 묵묵이 2017.01.17 4
15 아두이노에 작은별 멜로디 스케치 묵묵이 2017.01.17 4
14 아두이노 미세먼지 측정기 .. 만들기 file 묵묵이 2017.01.17 2
13 서버모터 테스트 소스 묵묵이 2017.01.16 7
12 서보모터 제어하기 묵묵이 2017.01.16 1
11 아두이노 프로 미니 보드와 USB TO TTL 모듈을 이용한 프로그램 업로드 묵묵이 2017.01.13 1
10 ir 리모컨 수신 test ( 현제 작업중 소스) [1] file 묵묵이 2017.01.12 4
9 ir 적외선 센서를 이용한 거리 측청 - test 잘됨 묵묵이 2017.01.12 2
8 초음파 센서 참고 소스 [1] 묵묵이 2017.01.12 4
7 아두이노 기초강좌 - IR 센서 [1] 묵묵이 2017.01.11 7
6 Arduino 아두이노 - relay module control 릴레이 모듈 제어 [1] 묵묵이 2017.01.10 19
5 아두이노 나노 알아보기 묵묵이 2017.01.10 2
위로