Dependencies:   PCA9955A_library_prototype mbed

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?

UserRevisionLine numberNew 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