add - CQpub0 Mikami / FIR_LPF_Direct

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "sub.hpp"
00003 #include "FIR_LPF.hpp"
00004 
00005 float mean_sum, ad_data[101];
00006 int average_mode, max_count, ad_pointer[5];
00007 
00008 void sum_clear(){
00009     int i;
00010     for (i=0; i<5; i++) ad_pointer[i] = 0;
00011     for (i=0; i<101; i++) ad_data[i] = 0;
00012     mean_sum = 0;
00013 }
00014 
00015 float move_mean_calc(float data){
00016     mean_sum = mean_sum - ad_data[ad_pointer[0]] + data;
00017     ad_data[ad_pointer[0]] = data;
00018     ad_pointer[0]++;
00019     if(ad_pointer[0] == max_count) ad_pointer[0] = 0;
00020     return(mean_sum / (float)max_count);
00021 }
00022 
00023 int main(){
00024     int i, detection, sum, gain;
00025     i = 0;
00026     detection = 0;
00027     gain = 1;
00028     for (i=0; i<5; i++) timer_value[i] = 0;
00029     for (i=0; i<=order; i++) xn[i] = 0.0;
00030     sum_clear();
00031     xbee.baud(38400);
00032     xbee.attach(&rx_fifoset, xbee.RxIrq);
00033     timer_setup.attach_us(&timer_interrupt, 5); // 5usec
00034     while(1){
00035         if(timer_value[1] > 19){ // 0.1msec sampling
00036             timer_value[1] = 0;
00037             float data = (float)gain * (analog_value3.read() - 0.5f);
00038             if(detection == 1){
00039                 if (data < 0) data = -data;
00040             }
00041             data = FIR_calc(data);      // FIR calc call
00042             if(timer_value[2] > 1999){  // 10msec
00043                 timer_value[2] = 0;
00044                 if(average_mode != 0) data = move_mean_calc(data);
00045                 tx_message((uint16_t)((data + 1.0f) * 2047)<<4);
00046             }
00047         }
00048         if(timer_value[0] > 99999){ // 500msec
00049             timer_value[0] = 0;
00050             myled = !myled;
00051         }
00052         tx_fifo_check();
00053         if(rx_fifo_check() == 1){
00054             sum = 0;
00055             for (i=0; i<6; i++) sum += conv_hex(raw_data[i])<<(4*(5-i));
00056             tx_message(sum); // Echo Back 
00057             if(sum>>16 == 0x80){
00058                 switch((sum & 0xff00)>>8){
00059                     case 0x00:
00060                         detection = sum & 0x01;
00061                         break;
00062                     case 0x01:
00063                         gain = sum & 0x0f;
00064                         break;
00065                     case 0x02:
00066                         average_mode = sum & 0x07;
00067                         max_count = 5;
00068                         switch(average_mode){
00069                             case(2):
00070                                 max_count = 10;
00071                                 break;
00072                             case(3):
00073                                 max_count = 20;
00074                                 break;
00075                             case(4):
00076                                 max_count = 50;
00077                                 break;
00078                             case(5):
00079                                 max_count = 100;
00080                                 break;
00081                             }
00082                         sum_clear();
00083                         break;
00084                 }
00085             }
00086         }        
00087     }
00088 }