아두이노 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;
}
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | 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] ![]() | 묵묵이 | 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 |
아두이노 미세먼지 측정기 .. 만들기
![]() | 묵묵이 | 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] ![]() | 묵묵이 | 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 |