IR remoute control multiple click button
IRremouteMy.h@2:7a268df54696, 2021-05-07 (annotated)
- Committer:
- docent
- Date:
- Fri May 07 15:38:48 2021 +0000
- Revision:
- 2:7a268df54696
- Parent:
- 0:94d6bf511846
corrections
Who changed what in which revision?
User | Revision | Line number | New 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 |