IRremote

Committer:
leejong87
Date:
Fri Nov 08 05:09:02 2013 +0000
Revision:
0:fe20e27c6295
Child:
1:e12749a24efd
IR Remote Control (38Khz)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
leejong87 0:fe20e27c6295 1 #include "IRremote.h"
leejong87 0:fe20e27c6295 2 #include "mbed.h"
leejong87 0:fe20e27c6295 3
leejong87 0:fe20e27c6295 4 //IR Timer
leejong87 0:fe20e27c6295 5 int IR_cnt, IR_state, IR_bit_cnt, IR_temp;
leejong87 0:fe20e27c6295 6 char IR_buf[4];
leejong87 0:fe20e27c6295 7
leejong87 0:fe20e27c6295 8 void IR_check()
leejong87 0:fe20e27c6295 9 {
leejong87 0:fe20e27c6295 10 if(IR_cnt<150) {
leejong87 0:fe20e27c6295 11 IR_cnt++;
leejong87 0:fe20e27c6295 12 }
leejong87 0:fe20e27c6295 13 if(IR_cnt>=150) {
leejong87 0:fe20e27c6295 14 IR_state=1;
leejong87 0:fe20e27c6295 15 }
leejong87 0:fe20e27c6295 16 }
leejong87 0:fe20e27c6295 17
leejong87 0:fe20e27c6295 18 //ReceiveIR
leejong87 0:fe20e27c6295 19 void IR_start()
leejong87 0:fe20e27c6295 20 {
leejong87 0:fe20e27c6295 21
leejong87 0:fe20e27c6295 22 switch(IR_state) {
leejong87 0:fe20e27c6295 23 case 1:
leejong87 0:fe20e27c6295 24 if((IR_cnt>85)&&(IR_cnt<140)) {
leejong87 0:fe20e27c6295 25 IR_state=2; // Lead
leejong87 0:fe20e27c6295 26 IR_bit_cnt=IR_temp=0;
leejong87 0:fe20e27c6295 27 }
leejong87 0:fe20e27c6295 28 break;
leejong87 0:fe20e27c6295 29 case 2:
leejong87 0:fe20e27c6295 30 if(IR_cnt> 25) {
leejong87 0:fe20e27c6295 31 IR_state=1; // Error
leejong87 0:fe20e27c6295 32 break;
leejong87 0:fe20e27c6295 33 } else if(IR_cnt>=15) {
leejong87 0:fe20e27c6295 34 IR_temp|=0x80; // Data 1 : 2.250ms(22)(0.56ms+1.69ms ) / 2ms
leejong87 0:fe20e27c6295 35 } else if(IR_cnt>= 8) {
leejong87 0:fe20e27c6295 36 IR_temp|=0x00; // Data 0 : 1.125ms(12)(0.56ms+0.565ms) / 1ms
leejong87 0:fe20e27c6295 37 } else {
leejong87 0:fe20e27c6295 38 IR_state=1; // Error
leejong87 0:fe20e27c6295 39 break;
leejong87 0:fe20e27c6295 40 }
leejong87 0:fe20e27c6295 41 if((++IR_bit_cnt%8)==0) {
leejong87 0:fe20e27c6295 42 IR_buf[(IR_bit_cnt/8)-1]=IR_temp;
leejong87 0:fe20e27c6295 43 IR_temp=0;
leejong87 0:fe20e27c6295 44 if(IR_bit_cnt>=32) {
leejong87 0:fe20e27c6295 45 IR_state=1;
leejong87 0:fe20e27c6295 46 IR_bit_cnt=0;
leejong87 0:fe20e27c6295 47 }
leejong87 0:fe20e27c6295 48 }
leejong87 0:fe20e27c6295 49 IR_temp>>=1;
leejong87 0:fe20e27c6295 50 break;
leejong87 0:fe20e27c6295 51 }
leejong87 0:fe20e27c6295 52 IR_cnt=0;
leejong87 0:fe20e27c6295 53 }
leejong87 0:fe20e27c6295 54
leejong87 0:fe20e27c6295 55 IRremote::IRremote(PinName pin) : _pin(pin)
leejong87 0:fe20e27c6295 56 {
leejong87 0:fe20e27c6295 57 _pin.mode(PullUp);
leejong87 0:fe20e27c6295 58 _pin.fall(&IR_start);
leejong87 0:fe20e27c6295 59 IR_timer.attach_us(&IR_check, 100.0);
leejong87 0:fe20e27c6295 60 }
leejong87 0:fe20e27c6295 61
leejong87 0:fe20e27c6295 62 char IRremote::read(int ir_i)
leejong87 0:fe20e27c6295 63 {
leejong87 0:fe20e27c6295 64 char IR_rx;
leejong87 0:fe20e27c6295 65 if(ir_i<4) {
leejong87 0:fe20e27c6295 66 IR_rx=IR_buf[ir_i];
leejong87 0:fe20e27c6295 67 IR_buf[ir_i]=0xFF;
leejong87 0:fe20e27c6295 68 } else {
leejong87 0:fe20e27c6295 69 IR_rx=0xFF;;
leejong87 0:fe20e27c6295 70 }
leejong87 0:fe20e27c6295 71 return IR_rx;
leejong87 0:fe20e27c6295 72 }