Dependencies: PCA9955A_library_prototype mbed
main.cpp@4:75a2c3550bdc, 2014-07-17 (annotated)
- Committer:
- okano
- Date:
- Thu Jul 17 01:43:50 2014 +0000
- Revision:
- 4:75a2c3550bdc
- Parent:
- 3:c1f60bb03ac4
- Child:
- 5:78bfbf11bb2f
led color selection fix
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okano | 0:71d7b5b100ab | 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 | 0:71d7b5b100ab | 7 | //AnalogIn ain( dp4 ); |
okano | 0:71d7b5b100ab | 8 | |
okano | 2:8a31696f1da5 | 9 | PCA9955A led_driver( p28, p27, 0x02 ); // SDA, SCL, I2C_slave_sddress |
okano | 2:8a31696f1da5 | 10 | |
okano | 2:8a31696f1da5 | 11 | Ticker t; |
okano | 2:8a31696f1da5 | 12 | |
okano | 2:8a31696f1da5 | 13 | int led_change = 0; |
okano | 2:8a31696f1da5 | 14 | |
okano | 2:8a31696f1da5 | 15 | |
okano | 2:8a31696f1da5 | 16 | void set_color( int v ); |
okano | 2:8a31696f1da5 | 17 | void led_cntl(); |
okano | 2:8a31696f1da5 | 18 | |
okano | 2:8a31696f1da5 | 19 | |
okano | 2:8a31696f1da5 | 20 | |
okano | 2:8a31696f1da5 | 21 | |
okano | 1:8bcef4962076 | 22 | int main() |
okano | 0:71d7b5b100ab | 23 | { |
okano | 1:8bcef4962076 | 24 | float in; |
okano | 1:8bcef4962076 | 25 | float coef = 26.4; |
okano | 0:71d7b5b100ab | 26 | float peak = 0; |
okano | 2:8a31696f1da5 | 27 | int shift; |
okano | 2:8a31696f1da5 | 28 | |
okano | 3:c1f60bb03ac4 | 29 | led_driver.set_all_intensity( 0xFF ); |
okano | 4:75a2c3550bdc | 30 | led_driver.set_all_intensity( 0x20, true ); |
okano | 2:8a31696f1da5 | 31 | |
okano | 2:8a31696f1da5 | 32 | set_color( 1 ); |
okano | 2:8a31696f1da5 | 33 | |
okano | 2:8a31696f1da5 | 34 | t.attach( &led_cntl, 0.02 ); |
okano | 2:8a31696f1da5 | 35 | |
okano | 0:71d7b5b100ab | 36 | while(1) { |
okano | 1:8bcef4962076 | 37 | in = (float)ain; |
okano | 1:8bcef4962076 | 38 | peak = in < peak ? peak : in; |
okano | 2:8a31696f1da5 | 39 | shift = (int)(coef * peak); |
okano | 2:8a31696f1da5 | 40 | leds = 0x1 << shift; |
okano | 1:8bcef4962076 | 41 | peak *= 0.999; |
okano | 2:8a31696f1da5 | 42 | |
okano | 2:8a31696f1da5 | 43 | |
okano | 2:8a31696f1da5 | 44 | if ( shift > 2 ) { |
okano | 2:8a31696f1da5 | 45 | led_change = 1; |
okano | 2:8a31696f1da5 | 46 | } |
okano | 0:71d7b5b100ab | 47 | } |
okano | 0:71d7b5b100ab | 48 | |
okano | 0:71d7b5b100ab | 49 | } |
okano | 2:8a31696f1da5 | 50 | |
okano | 2:8a31696f1da5 | 51 | void led_cntl() |
okano | 2:8a31696f1da5 | 52 | { |
okano | 4:75a2c3550bdc | 53 | static int count = 0; |
okano | 2:8a31696f1da5 | 54 | static float intensity = 1.0; |
okano | 2:8a31696f1da5 | 55 | |
okano | 2:8a31696f1da5 | 56 | if ( led_change ) { |
okano | 4:75a2c3550bdc | 57 | set_color( count++ & 0x3 ); |
okano | 2:8a31696f1da5 | 58 | led_change = 0; |
okano | 2:8a31696f1da5 | 59 | intensity = 1.0; |
okano | 2:8a31696f1da5 | 60 | } |
okano | 2:8a31696f1da5 | 61 | |
okano | 2:8a31696f1da5 | 62 | led_driver.set_all_intensity( (char)(intensity * (float)0xFF) ); |
okano | 2:8a31696f1da5 | 63 | |
okano | 2:8a31696f1da5 | 64 | intensity *= 0.90; |
okano | 2:8a31696f1da5 | 65 | } |
okano | 2:8a31696f1da5 | 66 | |
okano | 2:8a31696f1da5 | 67 | void set_color( int v ) |
okano | 2:8a31696f1da5 | 68 | { |
okano | 4:75a2c3550bdc | 69 | v = 0x1 << v; |
okano | 2:8a31696f1da5 | 70 | led_driver = (v << 12) | (v << 8) | (v << 4) | v; |
okano | 2:8a31696f1da5 | 71 | } |
okano | 2:8a31696f1da5 | 72 |