22

Dependencies:   mbed RemoteIR IR_Def1 HCSR04

Committer:
lucem1n
Date:
Mon Mar 25 12:10:48 2019 +0000
Revision:
0:253fc795d7f8
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lucem1n 0:253fc795d7f8 1 #include "mbed.h"
lucem1n 0:253fc795d7f8 2 #include "IR_Def.h"
lucem1n 0:253fc795d7f8 3 #include "hcsr04.h"
lucem1n 0:253fc795d7f8 4
lucem1n 0:253fc795d7f8 5 #define CAT0_PIN PC_1 // 11 PC_3 переставили с катодом 7
lucem1n 0:253fc795d7f8 6 #define CAT1_PIN PC_3 // 7 PC_2 переставили с катодом 6
lucem1n 0:253fc795d7f8 7 #define CAT2_PIN PB_0 // 4 PF_5 переставили с катодом 5
lucem1n 0:253fc795d7f8 8 #define CAT3_PIN PC_2 // 2 PA_0 переставили с катодом 4
lucem1n 0:253fc795d7f8 9 #define CAT4_PIN PA_4 // 1 PF_10
lucem1n 0:253fc795d7f8 10 #define CAT5_PIN PA_1 // 10 PF_2
lucem1n 0:253fc795d7f8 11 #define CAT6_PIN PC_0 // 5 PD_5
lucem1n 0:253fc795d7f8 12 #define CAT7_PIN PF_1 // 3 PH_0
lucem1n 0:253fc795d7f8 13
lucem1n 0:253fc795d7f8 14 #define ANO0_PIN PB_4 // 12 PC_0
lucem1n 0:253fc795d7f8 15 #define ANO1_PIN PB_5 // 9 PF_3
lucem1n 0:253fc795d7f8 16 #define ANO2_PIN PB_3 // 8 PB_0
lucem1n 0:253fc795d7f8 17 #define ANO3_PIN PB_10 // 6 PA_3
lucem1n 0:253fc795d7f8 18
lucem1n 0:253fc795d7f8 19 //------------------------------------
lucem1n 0:253fc795d7f8 20 // Hyperterminal configuration
lucem1n 0:253fc795d7f8 21 // 9600 bauds, 8-bit data, no parity
lucem1n 0:253fc795d7f8 22 //------------------------------------
lucem1n 0:253fc795d7f8 23 Serial pc(SERIAL_TX, SERIAL_RX);
lucem1n 0:253fc795d7f8 24 InterruptIn IR(PC_12);
lucem1n 0:253fc795d7f8 25 DigitalOut myled(LED1);
lucem1n 0:253fc795d7f8 26 Timer T;
lucem1n 0:253fc795d7f8 27 Ticker system_clock;
lucem1n 0:253fc795d7f8 28 Ticker pult; //This will be used to increment a counter every msec inside it's ISR
lucem1n 0:253fc795d7f8 29 Ticker display;
lucem1n 0:253fc795d7f8 30 Ticker distancee;
lucem1n 0:253fc795d7f8 31 Ticker muzika;
lucem1n 0:253fc795d7f8 32 AnalogOut Da(PA_5);
lucem1n 0:253fc795d7f8 33 //DigitalOut myled(LED2);
lucem1n 0:253fc795d7f8 34 DigitalOut cathodes[8] = {
lucem1n 0:253fc795d7f8 35 DigitalOut(CAT0_PIN),
lucem1n 0:253fc795d7f8 36 DigitalOut(CAT1_PIN),
lucem1n 0:253fc795d7f8 37 DigitalOut(CAT2_PIN),
lucem1n 0:253fc795d7f8 38 DigitalOut(CAT3_PIN),
lucem1n 0:253fc795d7f8 39 DigitalOut(CAT4_PIN),
lucem1n 0:253fc795d7f8 40 DigitalOut(CAT5_PIN),
lucem1n 0:253fc795d7f8 41 DigitalOut(CAT6_PIN),
lucem1n 0:253fc795d7f8 42 DigitalOut(CAT7_PIN),
lucem1n 0:253fc795d7f8 43 };
lucem1n 0:253fc795d7f8 44 DigitalOut anodes[4] = {
lucem1n 0:253fc795d7f8 45 DigitalOut(ANO0_PIN),
lucem1n 0:253fc795d7f8 46 DigitalOut(ANO1_PIN),
lucem1n 0:253fc795d7f8 47 DigitalOut(ANO2_PIN),
lucem1n 0:253fc795d7f8 48 DigitalOut(ANO3_PIN),
lucem1n 0:253fc795d7f8 49 };
lucem1n 0:253fc795d7f8 50
lucem1n 0:253fc795d7f8 51 int p = 0;
lucem1n 0:253fc795d7f8 52 int o=0;
lucem1n 0:253fc795d7f8 53 void IR_ISR(); //ISR for decoding the IR signal
lucem1n 0:253fc795d7f8 54 void dummy_ISR(); //Required so that 'IR_ISR' is not called on both rising and falling edges of IR signal at the same time
lucem1n 0:253fc795d7f8 55 void sys_tick();
lucem1n 0:253fc795d7f8 56 int v=0;
lucem1n 0:253fc795d7f8 57 uint8_t state = 0; //State variable for IR state machine
lucem1n 0:253fc795d7f8 58 uint8_t Rx_count = 0; //Counter to count no. of bits received
lucem1n 0:253fc795d7f8 59 uint32_t Rx_buf = 0; //To store recevied IR data
lucem1n 0:253fc795d7f8 60 char Rx_flag = 0; //Flag which indicates that a valid IR command was received
lucem1n 0:253fc795d7f8 61 uint32_t Rx_rep_count = 0; //To keep track of how many repeat pulses are received
lucem1n 0:253fc795d7f8 62 uint32_t Rx_rep_timeout_count = 0; //Timer which clears the previously received IR command, once it reaches the set limit
lucem1n 0:253fc795d7f8 63 uint32_t T_buf = 0; //Buffer to hold value of timer T
lucem1n 0:253fc795d7f8 64 char Rx_ignore_rep_flag = 0; //0 => Do not ignore repeat pulses
lucem1n 0:253fc795d7f8 65
lucem1n 0:253fc795d7f8 66 uint8_t digits[] = {0x03, 0x9F, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 0x01, 0x09, 0xFD, 0x91,0x89, 0x83};
lucem1n 0:253fc795d7f8 67 //DigitalOut trig(PA_3);
lucem1n 0:253fc795d7f8 68 //DigitalIn echo(PD_7);
lucem1n 0:253fc795d7f8 69 HCSR04 usensor(PB_13,PB_14);
lucem1n 0:253fc795d7f8 70 unsigned int dist=0;
lucem1n 0:253fc795d7f8 71 int flag1, flag2, flag3 = 0;
lucem1n 0:253fc795d7f8 72 int i,j,k,m,size=0;
lucem1n 0:253fc795d7f8 73
lucem1n 0:253fc795d7f8 74 void fireUpSign(int signNum){
lucem1n 0:253fc795d7f8 75 anodes[signNum] = 1;
lucem1n 0:253fc795d7f8 76 }
lucem1n 0:253fc795d7f8 77
lucem1n 0:253fc795d7f8 78 void shutDownSign(int signNum){
lucem1n 0:253fc795d7f8 79 anodes[signNum] = 0;
lucem1n 0:253fc795d7f8 80 }
lucem1n 0:253fc795d7f8 81 void setDigit(int digit){
lucem1n 0:253fc795d7f8 82 for(int isd=0; isd < 8; isd++){
lucem1n 0:253fc795d7f8 83 ((digits[digit] & (1<<(7-isd))) > 0) ? cathodes[isd] =1 : cathodes[isd] =0;
lucem1n 0:253fc795d7f8 84 }
lucem1n 0:253fc795d7f8 85 }
lucem1n 0:253fc795d7f8 86 void fireUpAllSigns(){
lucem1n 0:253fc795d7f8 87 fireUpSign(0);
lucem1n 0:253fc795d7f8 88 fireUpSign(1);
lucem1n 0:253fc795d7f8 89 fireUpSign(2);
lucem1n 0:253fc795d7f8 90 fireUpSign(3);
lucem1n 0:253fc795d7f8 91 }
lucem1n 0:253fc795d7f8 92
lucem1n 0:253fc795d7f8 93 void shutDownAllSigns(){
lucem1n 0:253fc795d7f8 94 shutDownSign(0);
lucem1n 0:253fc795d7f8 95 shutDownSign(1);
lucem1n 0:253fc795d7f8 96 shutDownSign(2);
lucem1n 0:253fc795d7f8 97 shutDownSign(3);
lucem1n 0:253fc795d7f8 98 }
lucem1n 0:253fc795d7f8 99 void ddisplay ()
lucem1n 0:253fc795d7f8 100 {
lucem1n 0:253fc795d7f8 101 setDigit(p);
lucem1n 0:253fc795d7f8 102 fireUpSign(3);
lucem1n 0:253fc795d7f8 103 wait_us(3000);
lucem1n 0:253fc795d7f8 104 shutDownAllSigns();
lucem1n 0:253fc795d7f8 105 setDigit(i);
lucem1n 0:253fc795d7f8 106 fireUpSign(2);
lucem1n 0:253fc795d7f8 107 wait_us(3000);
lucem1n 0:253fc795d7f8 108 shutDownAllSigns();
lucem1n 0:253fc795d7f8 109 setDigit(j);
lucem1n 0:253fc795d7f8 110 fireUpSign(1);
lucem1n 0:253fc795d7f8 111 wait_us(3000);
lucem1n 0:253fc795d7f8 112 shutDownAllSigns();
lucem1n 0:253fc795d7f8 113 setDigit(k);
lucem1n 0:253fc795d7f8 114 fireUpSign(0);
lucem1n 0:253fc795d7f8 115 wait_us(3000);
lucem1n 0:253fc795d7f8 116 shutDownAllSigns();
lucem1n 0:253fc795d7f8 117 //IR.fall(&IR_ISR);
lucem1n 0:253fc795d7f8 118 //IR.rise(&dummy_ISR);
lucem1n 0:253fc795d7f8 119 if(i>9)
lucem1n 0:253fc795d7f8 120 {
lucem1n 0:253fc795d7f8 121 j++;
lucem1n 0:253fc795d7f8 122 i=0;
lucem1n 0:253fc795d7f8 123 }
lucem1n 0:253fc795d7f8 124 if(j>9)
lucem1n 0:253fc795d7f8 125 {
lucem1n 0:253fc795d7f8 126 k++;
lucem1n 0:253fc795d7f8 127 j=0;
lucem1n 0:253fc795d7f8 128 i=0;
lucem1n 0:253fc795d7f8 129 }
lucem1n 0:253fc795d7f8 130 /*if(i == 1)
lucem1n 0:253fc795d7f8 131 {
lucem1n 0:253fc795d7f8 132 myled = !myled;
lucem1n 0:253fc795d7f8 133 wait_ms(300);
lucem1n 0:253fc795d7f8 134 i = 0;
lucem1n 0:253fc795d7f8 135 }*/
lucem1n 0:253fc795d7f8 136 }
lucem1n 0:253fc795d7f8 137 void ddistance ()
lucem1n 0:253fc795d7f8 138 {
lucem1n 0:253fc795d7f8 139 usensor.start();
lucem1n 0:253fc795d7f8 140 dist=usensor.get_dist_cm();
lucem1n 0:253fc795d7f8 141 //IR.fall(&IR_ISR);
lucem1n 0:253fc795d7f8 142 //IR.rise(&dummy_ISR);
lucem1n 0:253fc795d7f8 143 }
lucem1n 0:253fc795d7f8 144
lucem1n 0:253fc795d7f8 145 void sys_tick()
lucem1n 0:253fc795d7f8 146 {
lucem1n 0:253fc795d7f8 147 if(Rx_rep_timeout_count < 0xFFFF) { //Do not increment counter beyond 0xFFFF to prevent roll-over
lucem1n 0:253fc795d7f8 148 ++Rx_rep_timeout_count; //Increment this counter every 1msec.
lucem1n 0:253fc795d7f8 149 }
lucem1n 0:253fc795d7f8 150 }
lucem1n 0:253fc795d7f8 151
lucem1n 0:253fc795d7f8 152 void ppult ()
lucem1n 0:253fc795d7f8 153 {
lucem1n 0:253fc795d7f8 154 // if(o==0)
lucem1n 0:253fc795d7f8 155 // {
lucem1n 0:253fc795d7f8 156 //IR.mode(PullNone);
lucem1n 0:253fc795d7f8 157 //wait_ms(20);
lucem1n 0:253fc795d7f8 158 // IR.fall(&IR_ISR);
lucem1n 0:253fc795d7f8 159 // IR.rise(&dummy_ISR);
lucem1n 0:253fc795d7f8 160 // }
lucem1n 0:253fc795d7f8 161 }
lucem1n 0:253fc795d7f8 162
lucem1n 0:253fc795d7f8 163 int main()
lucem1n 0:253fc795d7f8 164 {
lucem1n 0:253fc795d7f8 165 int verh;
lucem1n 0:253fc795d7f8 166 int nij;
lucem1n 0:253fc795d7f8 167 while(1) {
lucem1n 0:253fc795d7f8 168 //if (o==0)
lucem1n 0:253fc795d7f8 169 // {
lucem1n 0:253fc795d7f8 170 // display.attach(&ddisplay, 0.02);
lucem1n 0:253fc795d7f8 171 // distancee.attach(&ddistance, 0.02);
lucem1n 0:253fc795d7f8 172 // pult.attach(&ppult, 2);
lucem1n 0:253fc795d7f8 173 ddisplay ();
lucem1n 0:253fc795d7f8 174 ddistance();
lucem1n 0:253fc795d7f8 175 // }
lucem1n 0:253fc795d7f8 176 verh = 80;
lucem1n 0:253fc795d7f8 177 nij = 10;
lucem1n 0:253fc795d7f8 178 if(dist >verh)
lucem1n 0:253fc795d7f8 179 {
lucem1n 0:253fc795d7f8 180 flag1=1;
lucem1n 0:253fc795d7f8 181 }
lucem1n 0:253fc795d7f8 182 if(flag1==1 && dist < nij)
lucem1n 0:253fc795d7f8 183 {
lucem1n 0:253fc795d7f8 184 flag2=1;
lucem1n 0:253fc795d7f8 185 }
lucem1n 0:253fc795d7f8 186 if (flag1==1 && flag2==1 && dist>verh)
lucem1n 0:253fc795d7f8 187 {
lucem1n 0:253fc795d7f8 188 flag3=1;
lucem1n 0:253fc795d7f8 189 }
lucem1n 0:253fc795d7f8 190 if( flag1==1 && flag2==1 && flag3==1)
lucem1n 0:253fc795d7f8 191 {
lucem1n 0:253fc795d7f8 192 flag1=0;
lucem1n 0:253fc795d7f8 193 flag2=0;
lucem1n 0:253fc795d7f8 194 flag3=0;
lucem1n 0:253fc795d7f8 195 i++;
lucem1n 0:253fc795d7f8 196 }
lucem1n 0:253fc795d7f8 197 if (v==1)
lucem1n 0:253fc795d7f8 198 {
lucem1n 0:253fc795d7f8 199 // pc.printf(" RX= %x " , Rx_buf);
lucem1n 0:253fc795d7f8 200
lucem1n 0:253fc795d7f8 201
lucem1n 0:253fc795d7f8 202 if(Rx_buf == 0xbf40ff00)
lucem1n 0:253fc795d7f8 203 {
lucem1n 0:253fc795d7f8 204 //pc.printf("5");
lucem1n 0:253fc795d7f8 205 p=0;
lucem1n 0:253fc795d7f8 206 j=0;
lucem1n 0:253fc795d7f8 207 i=0;
lucem1n 0:253fc795d7f8 208 k=0;
lucem1n 0:253fc795d7f8 209
lucem1n 0:253fc795d7f8 210 }
lucem1n 0:253fc795d7f8 211
lucem1n 0:253fc795d7f8 212 if(Rx_buf == 0xf609ff00)
lucem1n 0:253fc795d7f8 213 {
lucem1n 0:253fc795d7f8 214 i++;
lucem1n 0:253fc795d7f8 215 if(i>9)
lucem1n 0:253fc795d7f8 216 {
lucem1n 0:253fc795d7f8 217 j++;
lucem1n 0:253fc795d7f8 218 i=0;
lucem1n 0:253fc795d7f8 219 }
lucem1n 0:253fc795d7f8 220 if(j>9)
lucem1n 0:253fc795d7f8 221 {
lucem1n 0:253fc795d7f8 222 k++;
lucem1n 0:253fc795d7f8 223 j=0;
lucem1n 0:253fc795d7f8 224 i=0;
lucem1n 0:253fc795d7f8 225 }
lucem1n 0:253fc795d7f8 226 {
lucem1n 0:253fc795d7f8 227 }
lucem1n 0:253fc795d7f8 228 // pc.printf("9");
lucem1n 0:253fc795d7f8 229 }
lucem1n 0:253fc795d7f8 230
lucem1n 0:253fc795d7f8 231 if(Rx_buf == 0xf807ff00)
lucem1n 0:253fc795d7f8 232 {
lucem1n 0:253fc795d7f8 233 //pc.printf("7");
lucem1n 0:253fc795d7f8 234 if (p>9)
lucem1n 0:253fc795d7f8 235 {
lucem1n 0:253fc795d7f8 236 p=0;
lucem1n 0:253fc795d7f8 237 }
lucem1n 0:253fc795d7f8 238 else
lucem1n 0:253fc795d7f8 239 {
lucem1n 0:253fc795d7f8 240 p++;
lucem1n 0:253fc795d7f8 241 }
lucem1n 0:253fc795d7f8 242 }
lucem1n 0:253fc795d7f8 243
lucem1n 0:253fc795d7f8 244 if(Rx_buf == 0xe619ff00)
lucem1n 0:253fc795d7f8 245 {
lucem1n 0:253fc795d7f8 246 if(i+j+k<p)
lucem1n 0:253fc795d7f8 247 {
lucem1n 0:253fc795d7f8 248 i=0;
lucem1n 0:253fc795d7f8 249 j=0;
lucem1n 0:253fc795d7f8 250 k=0;
lucem1n 0:253fc795d7f8 251 p=0;
lucem1n 0:253fc795d7f8 252 }
lucem1n 0:253fc795d7f8 253 if(i>=p)
lucem1n 0:253fc795d7f8 254 {
lucem1n 0:253fc795d7f8 255 i=i-p;
lucem1n 0:253fc795d7f8 256 }
lucem1n 0:253fc795d7f8 257 else if(i<p)
lucem1n 0:253fc795d7f8 258 {
lucem1n 0:253fc795d7f8 259 if(j==0)
lucem1n 0:253fc795d7f8 260 {
lucem1n 0:253fc795d7f8 261 k=k-1;
lucem1n 0:253fc795d7f8 262 j=j+10-(p-i);
lucem1n 0:253fc795d7f8 263 i=i+10;
lucem1n 0:253fc795d7f8 264 i=i-p;
lucem1n 0:253fc795d7f8 265 }
lucem1n 0:253fc795d7f8 266 else if(j!=0)
lucem1n 0:253fc795d7f8 267 {
lucem1n 0:253fc795d7f8 268 i=i+10;
lucem1n 0:253fc795d7f8 269 i=i-p;
lucem1n 0:253fc795d7f8 270 j=j-1;
lucem1n 0:253fc795d7f8 271 }
lucem1n 0:253fc795d7f8 272 }
lucem1n 0:253fc795d7f8 273
lucem1n 0:253fc795d7f8 274
lucem1n 0:253fc795d7f8 275 //pc.printf("0");
lucem1n 0:253fc795d7f8 276 }
lucem1n 0:253fc795d7f8 277 v=0;
lucem1n 0:253fc795d7f8 278 }
lucem1n 0:253fc795d7f8 279
lucem1n 0:253fc795d7f8 280 // if(o==0)
lucem1n 0:253fc795d7f8 281 // {
lucem1n 0:253fc795d7f8 282 //IR.mode(PullNone);
lucem1n 0:253fc795d7f8 283 wait_ms(12);
lucem1n 0:253fc795d7f8 284 IR.fall(&IR_ISR);
lucem1n 0:253fc795d7f8 285 IR.rise(&dummy_ISR);
lucem1n 0:253fc795d7f8 286 //}
lucem1n 0:253fc795d7f8 287 }
lucem1n 0:253fc795d7f8 288 }
lucem1n 0:253fc795d7f8 289
lucem1n 0:253fc795d7f8 290 void dummy_ISR()
lucem1n 0:253fc795d7f8 291 {
lucem1n 0:253fc795d7f8 292 //Do nothing
lucem1n 0:253fc795d7f8 293 }
lucem1n 0:253fc795d7f8 294
lucem1n 0:253fc795d7f8 295 void IR_ISR()
lucem1n 0:253fc795d7f8 296 {
lucem1n 0:253fc795d7f8 297 o=1;
lucem1n 0:253fc795d7f8 298 display.detach();
lucem1n 0:253fc795d7f8 299 distancee.detach();
lucem1n 0:253fc795d7f8 300 //pult.detach();
lucem1n 0:253fc795d7f8 301 if(state == 0) {
lucem1n 0:253fc795d7f8 302 T.stop(); //Stop timer
lucem1n 0:253fc795d7f8 303 T.reset(); //Reset timer
lucem1n 0:253fc795d7f8 304 T.start(); //Start timer
lucem1n 0:253fc795d7f8 305 IR.rise(&IR_ISR); //Set IR interrupt to occur on rising edge
lucem1n 0:253fc795d7f8 306 IR.fall(&dummy_ISR);
lucem1n 0:253fc795d7f8 307 state = 1; //Go to next state
lucem1n 0:253fc795d7f8 308 Rx_count = 0; //Clear the received bits counter
lucem1n 0:253fc795d7f8 309 } else if(state == 1) {
lucem1n 0:253fc795d7f8 310
lucem1n 0:253fc795d7f8 311 T.stop(); //Stop timer
lucem1n 0:253fc795d7f8 312 T_buf = (uint32_t)T.read_us(); //Read timer
lucem1n 0:253fc795d7f8 313 T.reset(); //Reset timer
lucem1n 0:253fc795d7f8 314 T.start(); //Start timer
lucem1n 0:253fc795d7f8 315 IR.fall(&IR_ISR); //Set IR interrupt to occur on falling edge
lucem1n 0:253fc795d7f8 316 IR.rise(&dummy_ISR);
lucem1n 0:253fc795d7f8 317
lucem1n 0:253fc795d7f8 318 if(T_buf <= IR_9000us_UL && T_buf >= IR_9000us_LL) { //Check for preamble start pulse(9ms)
lucem1n 0:253fc795d7f8 319 state = 2; //Go to next state
lucem1n 0:253fc795d7f8 320 } else {
lucem1n 0:253fc795d7f8 321 state = 0; //Reset the state machine
lucem1n 0:253fc795d7f8 322 }
lucem1n 0:253fc795d7f8 323 } else if(state == 2) {
lucem1n 0:253fc795d7f8 324
lucem1n 0:253fc795d7f8 325 T.stop(); //Stop timer
lucem1n 0:253fc795d7f8 326 T_buf = (uint32_t)T.read_us(); //Read the value in timer
lucem1n 0:253fc795d7f8 327 T.reset(); //Reset timer
lucem1n 0:253fc795d7f8 328 T.start(); //Start timer
lucem1n 0:253fc795d7f8 329 IR.fall(&IR_ISR); //Set IR interrupt to occur on falling edge
lucem1n 0:253fc795d7f8 330 IR.rise(&dummy_ISR);
lucem1n 0:253fc795d7f8 331
lucem1n 0:253fc795d7f8 332 if(T_buf <= IR_4500us_UL && T_buf >= IR_4500us_LL) { //Check for preamble space(4.5ms)
lucem1n 0:253fc795d7f8 333
lucem1n 0:253fc795d7f8 334 state = 3; //Go to next state
lucem1n 0:253fc795d7f8 335 Rx_rep_timeout_count = 0; //Reset counter
lucem1n 0:253fc795d7f8 336 Rx_rep_count = 0; //Reset the repeat pulse counter
lucem1n 0:253fc795d7f8 337 } else if(T_buf <= IR_2250us_UL && T_buf >= IR_2250us_LL) { //Check for repeat pulse(2.25ms)
lucem1n 0:253fc795d7f8 338 state = 0; //Reset the state machine
lucem1n 0:253fc795d7f8 339
lucem1n 0:253fc795d7f8 340 if(Rx_rep_count < 0xFFFF) {
lucem1n 0:253fc795d7f8 341 if(Rx_rep_timeout_count < IR_rep_timeout_ms) { //Only increment the repeat pulse counter if the delay between two successive repeat pulses is less than 135msec.
lucem1n 0:253fc795d7f8 342 Rx_rep_timeout_count = 0; //Reset the counter everytime a valid repeat pulse is received
lucem1n 0:253fc795d7f8 343 ++Rx_rep_count;
lucem1n 0:253fc795d7f8 344 } else { //Invald repeat pulse received
lucem1n 0:253fc795d7f8 345 Rx_rep_count = 0; //Reset counter
lucem1n 0:253fc795d7f8 346 Rx_flag = 0; //Clear the flag to indicate that an IR command was not received
lucem1n 0:253fc795d7f8 347 Rx_buf = 0; //Clear the previously received command
lucem1n 0:253fc795d7f8 348 }
lucem1n 0:253fc795d7f8 349 }
lucem1n 0:253fc795d7f8 350 goto ahead; //Repeat the previous command
lucem1n 0:253fc795d7f8 351 } else { //Wrong pulse
lucem1n 0:253fc795d7f8 352 Rx_rep_count = 0; //Reset counter
lucem1n 0:253fc795d7f8 353 state = 0; //Reset the state machine
lucem1n 0:253fc795d7f8 354 }
lucem1n 0:253fc795d7f8 355 } else if(state == 3) {
lucem1n 0:253fc795d7f8 356 T.stop(); //Stop timer
lucem1n 0:253fc795d7f8 357 T_buf = T.read_us(); //Read the value in timer
lucem1n 0:253fc795d7f8 358 T.reset(); //Reset timer
lucem1n 0:253fc795d7f8 359 T.start(); //Start timer
lucem1n 0:253fc795d7f8 360 IR.fall(&IR_ISR); //Set IR interrupt to occur on falling edge
lucem1n 0:253fc795d7f8 361 IR.rise(&dummy_ISR);
lucem1n 0:253fc795d7f8 362 v=1 ;
lucem1n 0:253fc795d7f8 363
lucem1n 0:253fc795d7f8 364 if(T_buf <= IR_1_UL_us && T_buf >= IR_1_LL_us) { //Check if bit is '1'(2.25ms)
lucem1n 0:253fc795d7f8 365 ++Rx_count; //Increment the bit counter
lucem1n 0:253fc795d7f8 366 Rx_buf >>= 1;
lucem1n 0:253fc795d7f8 367 Rx_buf |= 0x80000000; //Shift in a '1' from the left side
lucem1n 0:253fc795d7f8 368
lucem1n 0:253fc795d7f8 369 state = 3; //Remain in current state
lucem1n 0:253fc795d7f8 370 } else if(T_buf <= IR_0_UL_us && T_buf >= IR_0_LL_us) { //Check if bit is '0'(1.12ms)
lucem1n 0:253fc795d7f8 371 ++Rx_count; //Increment the bit counter
lucem1n 0:253fc795d7f8 372 Rx_buf >>= 1; //Shift in a '0' from the left side
lucem1n 0:253fc795d7f8 373 state = 3; //Remain in current state
lucem1n 0:253fc795d7f8 374 } else { //Invalid data received
lucem1n 0:253fc795d7f8 375 Rx_count = 0;//Reset the bit counter
lucem1n 0:253fc795d7f8 376 state = 0; //Reset state m/c
lucem1n 0:253fc795d7f8 377
lucem1n 0:253fc795d7f8 378 }
lucem1n 0:253fc795d7f8 379
lucem1n 0:253fc795d7f8 380 if(Rx_count == 32) { //Check if all 32 bits have been received
lucem1n 0:253fc795d7f8 381 state = 0;
lucem1n 0:253fc795d7f8 382 //Reset state m/c
lucem1n 0:253fc795d7f8 383
lucem1n 0:253fc795d7f8 384 ahead:
lucem1n 0:253fc795d7f8 385
lucem1n 0:253fc795d7f8 386 if(!((Rx_rep_count > 0) && (Rx_ignore_rep_flag == 1))) {
lucem1n 0:253fc795d7f8 387 Rx_flag = 1; //Set this flag for repeat pulses only if repeat pulses are to be considered
lucem1n 0:253fc795d7f8 388 }
lucem1n 0:253fc795d7f8 389 Rx_rep_timeout_count = 0; //Reset the counter everytime a valid command is received
lucem1n 0:253fc795d7f8 390 }
lucem1n 0:253fc795d7f8 391 }
lucem1n 0:253fc795d7f8 392 o=0;
lucem1n 0:253fc795d7f8 393 }