Dependencies:   PCA9955A_library_prototype mbed

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?

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