Yoichi Nagashima
/
CQ_nagasm_05_detection
NucleoF401RE A/D Envelope detection with Moving average, transfer via XBww
main.cpp@0:14c6afea35c7, 2014-12-09 (annotated)
- Committer:
- nagasm
- Date:
- Tue Dec 09 00:51:38 2014 +0000
- Revision:
- 0:14c6afea35c7
NucleoF401RE A/D Envelope detection with Moving average, transfer via XBww
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nagasm | 0:14c6afea35c7 | 1 | #include "mbed.h" |
nagasm | 0:14c6afea35c7 | 2 | #include "sub.hpp" |
nagasm | 0:14c6afea35c7 | 3 | |
nagasm | 0:14c6afea35c7 | 4 | float mean_sum, ad_data[201]; |
nagasm | 0:14c6afea35c7 | 5 | int average_mode, max_count, ad_pointer[5]; |
nagasm | 0:14c6afea35c7 | 6 | |
nagasm | 0:14c6afea35c7 | 7 | void sum_clear(){ |
nagasm | 0:14c6afea35c7 | 8 | int i; |
nagasm | 0:14c6afea35c7 | 9 | for (i=0; i<5; i++) ad_pointer[i] = 0; |
nagasm | 0:14c6afea35c7 | 10 | for (i=0; i<201; i++) ad_data[i] = 0; |
nagasm | 0:14c6afea35c7 | 11 | mean_sum = 0; |
nagasm | 0:14c6afea35c7 | 12 | } |
nagasm | 0:14c6afea35c7 | 13 | |
nagasm | 0:14c6afea35c7 | 14 | float move_mean_calc(float data){ |
nagasm | 0:14c6afea35c7 | 15 | mean_sum = mean_sum - ad_data[ad_pointer[0]] + data; |
nagasm | 0:14c6afea35c7 | 16 | ad_data[ad_pointer[0]] = data; |
nagasm | 0:14c6afea35c7 | 17 | ad_pointer[0]++; |
nagasm | 0:14c6afea35c7 | 18 | if(ad_pointer[0] == max_count) ad_pointer[0] = 0; |
nagasm | 0:14c6afea35c7 | 19 | return(mean_sum / (float)max_count); |
nagasm | 0:14c6afea35c7 | 20 | } |
nagasm | 0:14c6afea35c7 | 21 | |
nagasm | 0:14c6afea35c7 | 22 | int main(){ |
nagasm | 0:14c6afea35c7 | 23 | int i, detection, sum, gain; |
nagasm | 0:14c6afea35c7 | 24 | i = 0; |
nagasm | 0:14c6afea35c7 | 25 | detection = 0; |
nagasm | 0:14c6afea35c7 | 26 | gain = 1; |
nagasm | 0:14c6afea35c7 | 27 | average_mode = 0; |
nagasm | 0:14c6afea35c7 | 28 | for (i=0; i<5; i++) timer_value[i] = 0; |
nagasm | 0:14c6afea35c7 | 29 | sum_clear(); |
nagasm | 0:14c6afea35c7 | 30 | xbee.baud(38400); |
nagasm | 0:14c6afea35c7 | 31 | xbee.attach(&rx_fifoset, xbee.RxIrq); |
nagasm | 0:14c6afea35c7 | 32 | timer_setup.attach_us(&timer_interrupt, 50); // 50usec |
nagasm | 0:14c6afea35c7 | 33 | while(1){ |
nagasm | 0:14c6afea35c7 | 34 | if(timer_value[2] > 99){ // 5msec |
nagasm | 0:14c6afea35c7 | 35 | timer_value[2] = 0; |
nagasm | 0:14c6afea35c7 | 36 | float data = (float)gain * (analog_value3.read() - 0.5f); |
nagasm | 0:14c6afea35c7 | 37 | if(detection == 1){ |
nagasm | 0:14c6afea35c7 | 38 | if (data < 0) data = -data; |
nagasm | 0:14c6afea35c7 | 39 | } |
nagasm | 0:14c6afea35c7 | 40 | if(average_mode != 0) data = move_mean_calc(data); |
nagasm | 0:14c6afea35c7 | 41 | tx_message((uint16_t)((data + 1.0f) * 2047)<<4); |
nagasm | 0:14c6afea35c7 | 42 | } |
nagasm | 0:14c6afea35c7 | 43 | if(timer_value[0] > 9999){ // 500msec |
nagasm | 0:14c6afea35c7 | 44 | timer_value[0] = 0; |
nagasm | 0:14c6afea35c7 | 45 | myled = !myled; |
nagasm | 0:14c6afea35c7 | 46 | } |
nagasm | 0:14c6afea35c7 | 47 | tx_fifo_check(); |
nagasm | 0:14c6afea35c7 | 48 | if(rx_fifo_check() == 1){ |
nagasm | 0:14c6afea35c7 | 49 | sum = 0; |
nagasm | 0:14c6afea35c7 | 50 | for (i=0; i<6; i++) sum += conv_hex(raw_data[i])<<(4*(5-i)); |
nagasm | 0:14c6afea35c7 | 51 | tx_message(sum); /* Echo Back */ |
nagasm | 0:14c6afea35c7 | 52 | if(sum>>16 == 0x80){ |
nagasm | 0:14c6afea35c7 | 53 | switch((sum & 0xff00)>>8){ |
nagasm | 0:14c6afea35c7 | 54 | case 0x00: |
nagasm | 0:14c6afea35c7 | 55 | detection = sum & 0x01; |
nagasm | 0:14c6afea35c7 | 56 | break; |
nagasm | 0:14c6afea35c7 | 57 | case 0x01: |
nagasm | 0:14c6afea35c7 | 58 | gain = sum & 0x0f; |
nagasm | 0:14c6afea35c7 | 59 | break; |
nagasm | 0:14c6afea35c7 | 60 | case 0x02: |
nagasm | 0:14c6afea35c7 | 61 | average_mode = sum & 0x07; |
nagasm | 0:14c6afea35c7 | 62 | max_count = 5; |
nagasm | 0:14c6afea35c7 | 63 | switch(average_mode){ |
nagasm | 0:14c6afea35c7 | 64 | case(2): |
nagasm | 0:14c6afea35c7 | 65 | max_count = 10; |
nagasm | 0:14c6afea35c7 | 66 | break; |
nagasm | 0:14c6afea35c7 | 67 | case(3): |
nagasm | 0:14c6afea35c7 | 68 | max_count = 20; |
nagasm | 0:14c6afea35c7 | 69 | break; |
nagasm | 0:14c6afea35c7 | 70 | case(4): |
nagasm | 0:14c6afea35c7 | 71 | max_count = 50; |
nagasm | 0:14c6afea35c7 | 72 | break; |
nagasm | 0:14c6afea35c7 | 73 | case(5): |
nagasm | 0:14c6afea35c7 | 74 | max_count = 100; |
nagasm | 0:14c6afea35c7 | 75 | break; |
nagasm | 0:14c6afea35c7 | 76 | case(6): |
nagasm | 0:14c6afea35c7 | 77 | max_count = 200; |
nagasm | 0:14c6afea35c7 | 78 | break; |
nagasm | 0:14c6afea35c7 | 79 | } |
nagasm | 0:14c6afea35c7 | 80 | sum_clear(); |
nagasm | 0:14c6afea35c7 | 81 | break; |
nagasm | 0:14c6afea35c7 | 82 | } |
nagasm | 0:14c6afea35c7 | 83 | } |
nagasm | 0:14c6afea35c7 | 84 | } |
nagasm | 0:14c6afea35c7 | 85 | } |
nagasm | 0:14c6afea35c7 | 86 | } |