IR remoute control multiple click button

Dependents:   Exam_TK Exam_TK

Committer:
docent
Date:
Fri Jul 12 07:35:10 2019 +0000
Revision:
0:94d6bf511846
For my students

Who changed what in which revision?

UserRevisionLine numberNew contents of line
docent 0:94d6bf511846 1 #define ONE_PULSE 3000
docent 0:94d6bf511846 2 #define ZERO_PULSE 1000
docent 0:94d6bf511846 3 #define ONE_PULSE_TH 1000
docent 0:94d6bf511846 4 #define ZERO_PULSE_TH 700
docent 0:94d6bf511846 5 #define IR_BUFF_MAX 2
docent 0:94d6bf511846 6
docent 0:94d6bf511846 7 #define IR_KEY_1 0xee917fc0
docent 0:94d6bf511846 8 #define IR_KEY_2 0xee51bfc0
docent 0:94d6bf511846 9 #define IR_KEY_3 0xee11ffc0
docent 0:94d6bf511846 10 #define IR_KEY_4 0xeed13fc0
docent 0:94d6bf511846 11 #define IR_KEY_5 0xefd03fc0
docent 0:94d6bf511846 12 #define IR_KEY_6 0xef10ffc0
docent 0:94d6bf511846 13 #define IR_KEY_7 0xfe01ffc0
docent 0:94d6bf511846 14 #define IR_KEY_8 0xfa857fc0
docent 0:94d6bf511846 15 #define IR_KEY_9 0xfd827fc0
docent 0:94d6bf511846 16
docent 0:94d6bf511846 17 #define IR_KEY_0 0xf9867fc0
docent 0:94d6bf511846 18 #define IR_KEY_STAR 0xfa45bfc0
docent 0:94d6bf511846 19 #define IR_KEY_SHARP 0xfc837fc0
docent 0:94d6bf511846 20
docent 0:94d6bf511846 21 #define IR_KEY_U 0xf9c63fc0
docent 0:94d6bf511846 22 #define IR_KEY_D 0xeb54bfc0
docent 0:94d6bf511846 23 #define IR_KEY_L 0xfdc23fc0
docent 0:94d6bf511846 24 #define IR_KEY_R 0xe956bfc0
docent 0:94d6bf511846 25 #define IR_KEY_OK 0xf8c73fc0
docent 0:94d6bf511846 26
docent 0:94d6bf511846 27 //------ IR Reciver time-------
docent 0:94d6bf511846 28 Timeout IrReciverTimer;
docent 0:94d6bf511846 29 Timer duration_timer;
docent 0:94d6bf511846 30
docent 0:94d6bf511846 31 //------ IR Reciver global-----
docent 0:94d6bf511846 32 uint8_t IrRecEn=1;
docent 0:94d6bf511846 33 uint8_t NewMode=0;
docent 0:94d6bf511846 34 uint8_t NewParametr=0;
docent 0:94d6bf511846 35 uint8_t bit_counter;
docent 0:94d6bf511846 36 uint8_t NewChar;
docent 0:94d6bf511846 37 uint16_t f_cnt,r_cnt;
docent 0:94d6bf511846 38 uint32_t IrChar,IrChar_t;
docent 0:94d6bf511846 39 char IRmessage_buff[16];
docent 0:94d6bf511846 40 uint8_t buff_cnt;
docent 0:94d6bf511846 41 uint8_t mode_ir;
docent 0:94d6bf511846 42 uint16_t parametr_t;
docent 0:94d6bf511846 43 //-----------------
docent 0:94d6bf511846 44 void IRmessage_t()
docent 0:94d6bf511846 45 {
docent 0:94d6bf511846 46 char c;
docent 0:94d6bf511846 47 char *endptr;
docent 0:94d6bf511846 48 if (NewChar){
docent 0:94d6bf511846 49 //pc.printf("0x%8x %d\r\n",IrChar,bit_counter);
docent 0:94d6bf511846 50 switch(IrChar){
docent 0:94d6bf511846 51 case IR_KEY_1:
docent 0:94d6bf511846 52 c='1';
docent 0:94d6bf511846 53 break;
docent 0:94d6bf511846 54 case IR_KEY_2:
docent 0:94d6bf511846 55 c='2';
docent 0:94d6bf511846 56 break;
docent 0:94d6bf511846 57 case IR_KEY_3:
docent 0:94d6bf511846 58 c='3';
docent 0:94d6bf511846 59 break;
docent 0:94d6bf511846 60 case IR_KEY_4:
docent 0:94d6bf511846 61 c='4';
docent 0:94d6bf511846 62 break;
docent 0:94d6bf511846 63 case IR_KEY_5:
docent 0:94d6bf511846 64 c='5';
docent 0:94d6bf511846 65 break;
docent 0:94d6bf511846 66 case IR_KEY_6:
docent 0:94d6bf511846 67 c='6';
docent 0:94d6bf511846 68 break;
docent 0:94d6bf511846 69 case IR_KEY_7:
docent 0:94d6bf511846 70 c='7';
docent 0:94d6bf511846 71 break;
docent 0:94d6bf511846 72 case IR_KEY_8:
docent 0:94d6bf511846 73 c='8';
docent 0:94d6bf511846 74 break;
docent 0:94d6bf511846 75 case IR_KEY_9:
docent 0:94d6bf511846 76 c='9';
docent 0:94d6bf511846 77 break;
docent 0:94d6bf511846 78 case IR_KEY_0:
docent 0:94d6bf511846 79 c='0';
docent 0:94d6bf511846 80 break;
docent 0:94d6bf511846 81 case IR_KEY_STAR:
docent 0:94d6bf511846 82 c='*';
docent 0:94d6bf511846 83 break;
docent 0:94d6bf511846 84 case IR_KEY_SHARP:
docent 0:94d6bf511846 85 c='#';
docent 0:94d6bf511846 86 break;
docent 0:94d6bf511846 87 case IR_KEY_U:
docent 0:94d6bf511846 88 c='U';
docent 0:94d6bf511846 89 break;
docent 0:94d6bf511846 90 case IR_KEY_D:
docent 0:94d6bf511846 91 c='D';
docent 0:94d6bf511846 92 break;
docent 0:94d6bf511846 93 case IR_KEY_L:
docent 0:94d6bf511846 94 c='L';
docent 0:94d6bf511846 95 break;
docent 0:94d6bf511846 96 case IR_KEY_R:
docent 0:94d6bf511846 97 c='R';
docent 0:94d6bf511846 98 break;
docent 0:94d6bf511846 99 case IR_KEY_OK:
docent 0:94d6bf511846 100 c='O';
docent 0:94d6bf511846 101 break;
docent 0:94d6bf511846 102 }
docent 0:94d6bf511846 103 NewChar=0;
docent 0:94d6bf511846 104 bit_counter=0;
docent 0:94d6bf511846 105 switch(c){
docent 0:94d6bf511846 106 case '*':
docent 0:94d6bf511846 107 IRmessage_buff[buff_cnt]='.';
docent 0:94d6bf511846 108 mode_ir=strtol(IRmessage_buff,&endptr,10);
docent 0:94d6bf511846 109 buff_cnt=0;
docent 0:94d6bf511846 110 NewMode=1;
docent 0:94d6bf511846 111 break;
docent 0:94d6bf511846 112 case '#':
docent 0:94d6bf511846 113 IRmessage_buff[buff_cnt]='.';
docent 0:94d6bf511846 114 parametr_t=strtol(IRmessage_buff,&endptr,10);
docent 0:94d6bf511846 115 buff_cnt=0;
docent 0:94d6bf511846 116 NewParametr=1;
docent 0:94d6bf511846 117 break;
docent 0:94d6bf511846 118 case 'U':
docent 0:94d6bf511846 119 mode_ir=11;
docent 0:94d6bf511846 120 NewMode=1;
docent 0:94d6bf511846 121 break;
docent 0:94d6bf511846 122 case 'D':
docent 0:94d6bf511846 123 mode_ir=12;
docent 0:94d6bf511846 124 NewMode=1;
docent 0:94d6bf511846 125 break;
docent 0:94d6bf511846 126 case 'L':
docent 0:94d6bf511846 127 mode_ir=13;
docent 0:94d6bf511846 128 NewMode=1;
docent 0:94d6bf511846 129 break;
docent 0:94d6bf511846 130 case 'R':
docent 0:94d6bf511846 131 mode_ir=14;
docent 0:94d6bf511846 132 NewMode=1;
docent 0:94d6bf511846 133 break;
docent 0:94d6bf511846 134 case 'O':
docent 0:94d6bf511846 135 mode_ir=1;
docent 0:94d6bf511846 136 NewMode=1;
docent 0:94d6bf511846 137 break;
docent 0:94d6bf511846 138 default:
docent 0:94d6bf511846 139 if(buff_cnt<15){
docent 0:94d6bf511846 140 IRmessage_buff[buff_cnt]=c;
docent 0:94d6bf511846 141 buff_cnt++;
docent 0:94d6bf511846 142 }
docent 0:94d6bf511846 143 break;
docent 0:94d6bf511846 144 }
docent 0:94d6bf511846 145 }
docent 0:94d6bf511846 146 }
docent 0:94d6bf511846 147
docent 0:94d6bf511846 148 //-----IR Reciver ISR-----
docent 0:94d6bf511846 149 void IrReciver_risingedge()
docent 0:94d6bf511846 150 {
docent 0:94d6bf511846 151 duration_timer.start();
docent 0:94d6bf511846 152 }
docent 0:94d6bf511846 153
docent 0:94d6bf511846 154 //----------------------
docent 0:94d6bf511846 155 void IrReciverTimer_isr()
docent 0:94d6bf511846 156 {
docent 0:94d6bf511846 157 IrChar=IrChar_t;
docent 0:94d6bf511846 158 IrChar_t=0;
docent 0:94d6bf511846 159 if(bit_counter==36)
docent 0:94d6bf511846 160 NewChar=1;
docent 0:94d6bf511846 161 else
docent 0:94d6bf511846 162 bit_counter=0;
docent 0:94d6bf511846 163 IRmessage_t();
docent 0:94d6bf511846 164 }
docent 0:94d6bf511846 165
docent 0:94d6bf511846 166 //--------------------------
docent 0:94d6bf511846 167 void IrReciver_fallingedge()
docent 0:94d6bf511846 168 {
docent 0:94d6bf511846 169 uint16_t duration_time;
docent 0:94d6bf511846 170 if(IrRecEn) {
docent 0:94d6bf511846 171 duration_timer.stop();
docent 0:94d6bf511846 172 duration_time=duration_timer.read_us();
docent 0:94d6bf511846 173 duration_timer.reset();
docent 0:94d6bf511846 174
docent 0:94d6bf511846 175 IrChar_t=IrChar_t>>1;
docent 0:94d6bf511846 176 if (duration_time>ONE_PULSE_TH)
docent 0:94d6bf511846 177 IrChar_t=IrChar_t|0x80000000;
docent 0:94d6bf511846 178 else
docent 0:94d6bf511846 179 IrChar_t=IrChar_t&0x7fffffff;
docent 0:94d6bf511846 180 bit_counter++;
docent 0:94d6bf511846 181 IrReciverTimer.detach();
docent 0:94d6bf511846 182 IrReciverTimer.attach_us(&IrReciverTimer_isr,50000);
docent 0:94d6bf511846 183 }
docent 0:94d6bf511846 184 }
docent 0:94d6bf511846 185
docent 0:94d6bf511846 186 //--------------------------------------
docent 0:94d6bf511846 187 void TRremoteIni(InterruptIn *IrReciver)
docent 0:94d6bf511846 188 {
docent 0:94d6bf511846 189 IrReciver->rise(&IrReciver_risingedge);
docent 0:94d6bf511846 190 IrReciver->fall(&IrReciver_fallingedge);
docent 0:94d6bf511846 191 bit_counter=0;
docent 0:94d6bf511846 192 IrChar=0;
docent 0:94d6bf511846 193 IrChar_t=0;
docent 0:94d6bf511846 194 IrRecEn=1;
docent 0:94d6bf511846 195 NewChar=0;
docent 0:94d6bf511846 196 buff_cnt=0;
docent 0:94d6bf511846 197 }
docent 0:94d6bf511846 198
docent 0:94d6bf511846 199 //---------------------------------------------
docent 0:94d6bf511846 200 void IRmessage(uint8_t *mode,uint8_t *mode_ind,uint16_t *parametr)
docent 0:94d6bf511846 201 {
docent 0:94d6bf511846 202 if(NewMode){
docent 0:94d6bf511846 203 *mode=*mode_ind=mode_ir;
docent 0:94d6bf511846 204 NewMode=0;
docent 0:94d6bf511846 205 }
docent 0:94d6bf511846 206 if(NewParametr){
docent 0:94d6bf511846 207 *parametr=parametr_t;
docent 0:94d6bf511846 208 NewParametr=0;
docent 0:94d6bf511846 209 }
docent 0:94d6bf511846 210 }
docent 0:94d6bf511846 211
docent 0:94d6bf511846 212