Dependencies: PCA9955A_library_prototype mbed
main.cpp@6:4da1c7f560b8, 2014-07-17 (annotated)
- Committer:
- okano
- Date:
- Thu Jul 17 07:48:12 2014 +0000
- Revision:
- 6:4da1c7f560b8
- Parent:
- 5:78bfbf11bb2f
- Child:
- 7:40f2b0db16a6
peak detect
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okano | 5:78bfbf11bb2f | 1 | #include "mbed.h" |
okano | 2:8a31696f1da5 | 2 | #include "PCA9955A.h" |
okano | 0:71d7b5b100ab | 3 | |
okano | 1:8bcef4962076 | 4 | BusOut leds( LED4, LED3, LED2, LED1 ); |
okano | 4:75a2c3550bdc | 5 | DigitalOut pin( p21 ); |
okano | 0:71d7b5b100ab | 6 | AnalogIn ain( p20 ); |
okano | 5:78bfbf11bb2f | 7 | AnalogOut aout( p18 ); |
okano | 0:71d7b5b100ab | 8 | |
okano | 5:78bfbf11bb2f | 9 | PCA9955A led_driver( p28, p27, 0x02 ); // SDA, SCL, I2C_slave_sddress |
okano | 2:8a31696f1da5 | 10 | |
okano | 5:78bfbf11bb2f | 11 | Ticker led_maintenance; |
okano | 5:78bfbf11bb2f | 12 | Ticker sample_timing; |
okano | 2:8a31696f1da5 | 13 | |
okano | 2:8a31696f1da5 | 14 | int led_change = 0; |
okano | 5:78bfbf11bb2f | 15 | int sampling = 0; |
okano | 2:8a31696f1da5 | 16 | |
okano | 2:8a31696f1da5 | 17 | |
okano | 2:8a31696f1da5 | 18 | void set_color( int v ); |
okano | 2:8a31696f1da5 | 19 | void led_cntl(); |
okano | 5:78bfbf11bb2f | 20 | void ad_cntl(); |
okano | 2:8a31696f1da5 | 21 | |
okano | 2:8a31696f1da5 | 22 | |
okano | 2:8a31696f1da5 | 23 | |
okano | 2:8a31696f1da5 | 24 | |
okano | 1:8bcef4962076 | 25 | int main() |
okano | 0:71d7b5b100ab | 26 | { |
okano | 1:8bcef4962076 | 27 | float in; |
okano | 6:4da1c7f560b8 | 28 | float coef = 26.4; |
okano | 6:4da1c7f560b8 | 29 | float peak = 0; |
okano | 6:4da1c7f560b8 | 30 | float thresold = 0.05; |
okano | 2:8a31696f1da5 | 31 | int shift; |
okano | 2:8a31696f1da5 | 32 | |
okano | 3:c1f60bb03ac4 | 33 | led_driver.set_all_intensity( 0xFF ); |
okano | 6:4da1c7f560b8 | 34 | led_driver.set_all_intensity( 0x40, true ); |
okano | 2:8a31696f1da5 | 35 | |
okano | 2:8a31696f1da5 | 36 | set_color( 1 ); |
okano | 2:8a31696f1da5 | 37 | |
okano | 5:78bfbf11bb2f | 38 | led_maintenance.attach( &led_cntl, 0.02 ); |
okano | 5:78bfbf11bb2f | 39 | sample_timing.attach( &ad_cntl, 0.01 ); |
okano | 2:8a31696f1da5 | 40 | |
okano | 0:71d7b5b100ab | 41 | while(1) { |
okano | 5:78bfbf11bb2f | 42 | |
okano | 5:78bfbf11bb2f | 43 | if ( sampling ) { |
okano | 5:78bfbf11bb2f | 44 | sampling = 0; |
okano | 2:8a31696f1da5 | 45 | |
okano | 5:78bfbf11bb2f | 46 | pin =0; |
okano | 5:78bfbf11bb2f | 47 | in = (float)ain; |
okano | 6:4da1c7f560b8 | 48 | |
okano | 6:4da1c7f560b8 | 49 | if ( 0.06 < in ) { |
okano | 6:4da1c7f560b8 | 50 | if ( peak < in ) { |
okano | 6:4da1c7f560b8 | 51 | if ( thresold < (in - peak) ) { |
okano | 6:4da1c7f560b8 | 52 | thresold = in - peak; |
okano | 6:4da1c7f560b8 | 53 | led_change = 1; |
okano | 6:4da1c7f560b8 | 54 | } |
okano | 6:4da1c7f560b8 | 55 | peak = in; |
okano | 6:4da1c7f560b8 | 56 | } |
okano | 6:4da1c7f560b8 | 57 | } |
okano | 6:4da1c7f560b8 | 58 | |
okano | 5:78bfbf11bb2f | 59 | shift = (int)(coef * peak); |
okano | 5:78bfbf11bb2f | 60 | leds = 0x1 << shift; |
okano | 5:78bfbf11bb2f | 61 | peak *= 0.99; |
okano | 6:4da1c7f560b8 | 62 | thresold*= (thresold < 0.07) ? 0.07 : thresold * 0.9; |
okano | 5:78bfbf11bb2f | 63 | pin =1; |
okano | 5:78bfbf11bb2f | 64 | aout = peak; |
okano | 2:8a31696f1da5 | 65 | |
okano | 5:78bfbf11bb2f | 66 | if ( shift > 2 ) { |
okano | 6:4da1c7f560b8 | 67 | //led_change = 1; |
okano | 5:78bfbf11bb2f | 68 | } |
okano | 2:8a31696f1da5 | 69 | } |
okano | 0:71d7b5b100ab | 70 | } |
okano | 0:71d7b5b100ab | 71 | |
okano | 0:71d7b5b100ab | 72 | } |
okano | 2:8a31696f1da5 | 73 | |
okano | 6:4da1c7f560b8 | 74 | |
okano | 6:4da1c7f560b8 | 75 | int peak_detect() |
okano | 6:4da1c7f560b8 | 76 | { |
okano | 6:4da1c7f560b8 | 77 | } |
okano | 6:4da1c7f560b8 | 78 | |
okano | 5:78bfbf11bb2f | 79 | void ad_cntl() |
okano | 5:78bfbf11bb2f | 80 | { |
okano | 5:78bfbf11bb2f | 81 | sampling = 1; |
okano | 5:78bfbf11bb2f | 82 | } |
okano | 5:78bfbf11bb2f | 83 | |
okano | 5:78bfbf11bb2f | 84 | |
okano | 5:78bfbf11bb2f | 85 | void led_cntl() |
okano | 2:8a31696f1da5 | 86 | { |
okano | 4:75a2c3550bdc | 87 | static int count = 0; |
okano | 2:8a31696f1da5 | 88 | static float intensity = 1.0; |
okano | 2:8a31696f1da5 | 89 | |
okano | 2:8a31696f1da5 | 90 | if ( led_change ) { |
okano | 4:75a2c3550bdc | 91 | set_color( count++ & 0x3 ); |
okano | 2:8a31696f1da5 | 92 | led_change = 0; |
okano | 2:8a31696f1da5 | 93 | intensity = 1.0; |
okano | 2:8a31696f1da5 | 94 | } |
okano | 5:78bfbf11bb2f | 95 | |
okano | 2:8a31696f1da5 | 96 | led_driver.set_all_intensity( (char)(intensity * (float)0xFF) ); |
okano | 5:78bfbf11bb2f | 97 | |
okano | 2:8a31696f1da5 | 98 | intensity *= 0.90; |
okano | 2:8a31696f1da5 | 99 | } |
okano | 2:8a31696f1da5 | 100 | |
okano | 2:8a31696f1da5 | 101 | void set_color( int v ) |
okano | 2:8a31696f1da5 | 102 | { |
okano | 4:75a2c3550bdc | 103 | v = 0x1 << v; |
okano | 2:8a31696f1da5 | 104 | led_driver = (v << 12) | (v << 8) | (v << 4) | v; |
okano | 2:8a31696f1da5 | 105 | } |
okano | 2:8a31696f1da5 | 106 |