APP Team / Mbed 2 deprecated app3

Dependencies:   mbed mbed-rtos

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers receiver.cpp Source File

receiver.cpp

00001 #include "main.h"
00002 
00003 extern Serial pc;
00004 DigitalOut myled2(LED2);                                                                         
00005 char s[300];
00006 enum steps {STEP_A,STEP_B,STEP_C};
00007 steps state;
00008 int t[7];
00009 int temps;
00010 int b_count;
00011 int last_value;
00012 
00013 // TEST
00014 bool msgReady;
00015 string testString;
00016 
00017 
00018 void Receiver_init(void)
00019 {
00020     myled2 = 0;
00021    // s = "";
00022     msgReady = false;
00023     state = STEP_A;
00024     
00025     
00026     
00027     // Enable the pins on the device to use TIMER CAP2.0 on pin 30
00028     LPC_PINCON->PINSEL0 |= 3<<8;
00029     
00030     NVIC_SetVector(TIMER2_IRQn, uint32_t(TIMER2_IRQHandler));
00031     
00032     // init Timer 2 (cap2.0 = DIP30, cap2.1 = DIP29)
00033     LPC_SC->PCONP |= (1 << 22);         // Timer2 power on
00034     //LPC_SC->PCLKSEL1 |= (1 << 12);      // Divide CCLK by 1 for Timer2
00035     LPC_TIM2->TC = 0;                   // clear timer counter
00036     LPC_TIM2->PC = 0;                   // clear prescale counter
00037     LPC_TIM2->PR = 0;                   // clear prescale register
00038     LPC_TIM2->TCR = (1 << 1);          // reset timer
00039     LPC_TIM2->IR |= 1 << 0;         // Clear MR0 interrupt flag
00040     LPC_TIM2->CCR |= (7 << 0);        // enable cap2.0 rising-edge capture and falling-edge; interrupt on cap2.0
00041     //LPC_TIM2->TCR = 1;          // start Timer2
00042     
00043     NVIC_EnableIRQ(TIMER2_IRQn);    //enable timer2 interrupt
00044     
00045     b_count = 0;
00046 }
00047 
00048 extern "C"  void TIMER2_IRQHandler (void)
00049 {       
00050         int ecart = 0;
00051         char buffer[1];
00052         myled2 =!myled2;
00053         string endChar;
00054               
00055         LPC_TIM2->IR |= 1 << 0;         // Clear MR0 interrupt flag        
00056       
00057         switch (state)
00058         {
00059             case STEP_A:    LPC_TIM2->TCR = 1;      // start Timer2
00060                             state = STEP_B;
00061                             b_count = 0;
00062                             s[0] = '0';
00063                             break;
00064                             
00065             case STEP_B:    t[b_count-1] = LPC_TIM2->CR0;  
00066                             LPC_TIM2->TCR = (1 << 1);
00067                             LPC_TIM2->TCR = 1;
00068                             if(b_count>6)
00069                             {
00070                                 state = STEP_C;
00071                                 //temps = (t[0] + t[1] + t[2] + t[3] + t[4] + t[5] + t[6])/7;
00072                                 temps = TIME;
00073                                  s[1] = '1';s[2] = '0';s[3] = '1';s[4] = '0';s[5] = '1';s[6] = '0';s[7] = '1';
00074                                 last_value = 1;                             
00075                             }
00076                             
00077                             
00078                             break;                             
00079             case STEP_C:    /*ecart = LPC_TIM2->CR0;
00080                             if(ecart*1.5<temps)
00081                             {
00082                                 sprintf(buffer, "%d", last_value);
00083                                 s+= buffer[0];
00084                             }
00085                             else
00086                             {
00087                                 last_value = 1-last_value;
00088                                 sprintf(buffer, "%d", last_value);
00089                                 s+= buffer[0];
00090                             }
00091     
00092                             endChar = s.substr((s.size()-8), 8); 
00093                             if(endChar == "00111110")
00094                             {*/
00095                                 state = STEP_A;
00096                                 testString = s; 
00097                                // s = ""; 
00098                                 msgReady= true;  
00099                            // }
00100                         
00101                             LPC_TIM2->TCR = (1 << 1);
00102                             LPC_TIM2->TCR = 1;
00103                             
00104                             break;                         
00105         }   
00106         b_count++;
00107 }
00108 
00109 void Receiver_thread(void const *args)
00110 {
00111     Receiver_init();
00112     
00113     while(1)
00114     {
00115         if(msgReady == true)
00116        {
00117             pc.printf("\n\rmessage recu: %d", b_count);
00118             b_count =0;
00119             msgReady= false;   
00120         }
00121     }
00122 }