Dependencies: PCA9955A_library_prototype mbed
main.cpp@5:78bfbf11bb2f, 2014-07-17 (annotated)
- Committer:
- okano
- Date:
- Thu Jul 17 02:08:37 2014 +0000
- Revision:
- 5:78bfbf11bb2f
- Parent:
- 4:75a2c3550bdc
- Child:
- 6:4da1c7f560b8
peak hold coefficient adjustment
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 | 1:8bcef4962076 | 28 | float coef = 26.4; |
okano | 0:71d7b5b100ab | 29 | float peak = 0; |
okano | 2:8a31696f1da5 | 30 | int shift; |
okano | 2:8a31696f1da5 | 31 | |
okano | 3:c1f60bb03ac4 | 32 | led_driver.set_all_intensity( 0xFF ); |
okano | 4:75a2c3550bdc | 33 | led_driver.set_all_intensity( 0x20, true ); |
okano | 2:8a31696f1da5 | 34 | |
okano | 2:8a31696f1da5 | 35 | set_color( 1 ); |
okano | 2:8a31696f1da5 | 36 | |
okano | 5:78bfbf11bb2f | 37 | led_maintenance.attach( &led_cntl, 0.02 ); |
okano | 5:78bfbf11bb2f | 38 | sample_timing.attach( &ad_cntl, 0.01 ); |
okano | 2:8a31696f1da5 | 39 | |
okano | 0:71d7b5b100ab | 40 | while(1) { |
okano | 5:78bfbf11bb2f | 41 | |
okano | 5:78bfbf11bb2f | 42 | if ( sampling ) { |
okano | 5:78bfbf11bb2f | 43 | sampling = 0; |
okano | 2:8a31696f1da5 | 44 | |
okano | 5:78bfbf11bb2f | 45 | pin =0; |
okano | 5:78bfbf11bb2f | 46 | in = (float)ain; |
okano | 5:78bfbf11bb2f | 47 | peak = in < peak ? peak : in; |
okano | 5:78bfbf11bb2f | 48 | shift = (int)(coef * peak); |
okano | 5:78bfbf11bb2f | 49 | leds = 0x1 << shift; |
okano | 5:78bfbf11bb2f | 50 | peak *= 0.99; |
okano | 5:78bfbf11bb2f | 51 | pin =1; |
okano | 5:78bfbf11bb2f | 52 | aout = peak; |
okano | 2:8a31696f1da5 | 53 | |
okano | 5:78bfbf11bb2f | 54 | if ( shift > 2 ) { |
okano | 5:78bfbf11bb2f | 55 | led_change = 1; |
okano | 5:78bfbf11bb2f | 56 | } |
okano | 2:8a31696f1da5 | 57 | } |
okano | 0:71d7b5b100ab | 58 | } |
okano | 0:71d7b5b100ab | 59 | |
okano | 0:71d7b5b100ab | 60 | } |
okano | 2:8a31696f1da5 | 61 | |
okano | 5:78bfbf11bb2f | 62 | void ad_cntl() |
okano | 5:78bfbf11bb2f | 63 | { |
okano | 5:78bfbf11bb2f | 64 | sampling = 1; |
okano | 5:78bfbf11bb2f | 65 | } |
okano | 5:78bfbf11bb2f | 66 | |
okano | 5:78bfbf11bb2f | 67 | |
okano | 5:78bfbf11bb2f | 68 | void led_cntl() |
okano | 2:8a31696f1da5 | 69 | { |
okano | 4:75a2c3550bdc | 70 | static int count = 0; |
okano | 2:8a31696f1da5 | 71 | static float intensity = 1.0; |
okano | 2:8a31696f1da5 | 72 | |
okano | 2:8a31696f1da5 | 73 | if ( led_change ) { |
okano | 4:75a2c3550bdc | 74 | set_color( count++ & 0x3 ); |
okano | 2:8a31696f1da5 | 75 | led_change = 0; |
okano | 2:8a31696f1da5 | 76 | intensity = 1.0; |
okano | 2:8a31696f1da5 | 77 | } |
okano | 5:78bfbf11bb2f | 78 | |
okano | 2:8a31696f1da5 | 79 | led_driver.set_all_intensity( (char)(intensity * (float)0xFF) ); |
okano | 5:78bfbf11bb2f | 80 | |
okano | 2:8a31696f1da5 | 81 | intensity *= 0.90; |
okano | 2:8a31696f1da5 | 82 | } |
okano | 2:8a31696f1da5 | 83 | |
okano | 2:8a31696f1da5 | 84 | void set_color( int v ) |
okano | 2:8a31696f1da5 | 85 | { |
okano | 4:75a2c3550bdc | 86 | v = 0x1 << v; |
okano | 2:8a31696f1da5 | 87 | led_driver = (v << 12) | (v << 8) | (v << 4) | v; |
okano | 2:8a31696f1da5 | 88 | } |
okano | 2:8a31696f1da5 | 89 |