Dependencies:   PCA9955A_library_prototype mbed

main.cpp

Committer:
okano
Date:
2014-07-17
Revision:
4:75a2c3550bdc
Parent:
3:c1f60bb03ac4
Child:
5:78bfbf11bb2f

File content as of revision 4:75a2c3550bdc:

#include "mbed.h"
#include    "PCA9955A.h"

BusOut      leds( LED4, LED3, LED2, LED1 );
DigitalOut  pin( p21 );
AnalogIn    ain( p20 );
//AnalogIn    ain( dp4 );

PCA9955A     led_driver( p28, p27, 0x02 );   // SDA, SCL, I2C_slave_sddress

Ticker      t;

int     led_change  = 0;


void    set_color( int v );
void    led_cntl();




int main()
{
    float   in;
    float   coef    = 26.4;
    float   peak    = 0;
    int     shift;

    led_driver.set_all_intensity( 0xFF );
    led_driver.set_all_intensity( 0x20, true );

    set_color( 1 );

    t.attach( &led_cntl, 0.02 );

    while(1) {
        in      = (float)ain;
        peak    = in < peak ? peak : in;
        shift  = (int)(coef * peak);
        leds    = 0x1 << shift;
        peak    *= 0.999;


        if ( shift > 2 ) {
            led_change  = 1;
        }
    }

}

void    led_cntl()
{
    static int      count       = 0;
    static float    intensity   = 1.0;

    if ( led_change ) {
        set_color( count++ & 0x3 );
        led_change  = 0;
        intensity   = 1.0;
    }
    
    led_driver.set_all_intensity( (char)(intensity * (float)0xFF) );
    
    intensity   *= 0.90;
}

void set_color( int v )
{
    v   = 0x1 << v;
    led_driver  = (v << 12) | (v << 8) | (v << 4) | v;
}