![](/media/cache/profiles/795c7a7a5ec6b460ec00c5841019b9e9.jpg.50x50_q85.jpg)
PCA9956B (24ch LED controller). Simple 2 demoboards operation.
Simple demo code for two PCA9956B demo boards.
Diff: main.cpp
- Revision:
- 0:c0060f6e9b43
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Jul 22 07:48:31 2015 +0000 @@ -0,0 +1,143 @@ +#include "mbed.h" +#include "PCA9956A.h" + +I2C i2c( p28, p27 );// SDA, SCL + +#define CURRENT_SETTING 1.0 + +PCA9956A lc[] = { + PCA9956A( i2c, 0x02 ), + PCA9956A( i2c, 0x04 ) +}; + +LedPwmOutCC led[ 3 ][ 16 ] = { + { + LedPwmOutCC( lc[ 0 ], L0 ), + LedPwmOutCC( lc[ 0 ], L3 ), + LedPwmOutCC( lc[ 0 ], L6 ), + LedPwmOutCC( lc[ 0 ], L9 ), + LedPwmOutCC( lc[ 1 ], L0 ), + LedPwmOutCC( lc[ 1 ], L3 ), + LedPwmOutCC( lc[ 1 ], L6 ), + LedPwmOutCC( lc[ 1 ], L9 ), + LedPwmOutCC( lc[ 1 ], L12 ), + LedPwmOutCC( lc[ 1 ], L15 ), + LedPwmOutCC( lc[ 1 ], L18 ), + LedPwmOutCC( lc[ 1 ], L21 ), + LedPwmOutCC( lc[ 0 ], L12 ), + LedPwmOutCC( lc[ 0 ], L15 ), + LedPwmOutCC( lc[ 0 ], L18 ), + LedPwmOutCC( lc[ 0 ], L21 ), + }, + { + LedPwmOutCC( lc[ 0 ], L1 ), + LedPwmOutCC( lc[ 0 ], L4 ), + LedPwmOutCC( lc[ 0 ], L7 ), + LedPwmOutCC( lc[ 0 ], L10 ), + LedPwmOutCC( lc[ 1 ], L1 ), + LedPwmOutCC( lc[ 1 ], L4 ), + LedPwmOutCC( lc[ 1 ], L7 ), + LedPwmOutCC( lc[ 1 ], L10 ), + LedPwmOutCC( lc[ 1 ], L13 ), + LedPwmOutCC( lc[ 1 ], L16 ), + LedPwmOutCC( lc[ 1 ], L19 ), + LedPwmOutCC( lc[ 1 ], L22 ), + LedPwmOutCC( lc[ 0 ], L13 ), + LedPwmOutCC( lc[ 0 ], L16 ), + LedPwmOutCC( lc[ 0 ], L19 ), + LedPwmOutCC( lc[ 0 ], L22 ), + }, + { + LedPwmOutCC( lc[ 0 ], L2 ), + LedPwmOutCC( lc[ 0 ], L5 ), + LedPwmOutCC( lc[ 0 ], L8 ), + LedPwmOutCC( lc[ 0 ], L11 ), + LedPwmOutCC( lc[ 1 ], L2 ), + LedPwmOutCC( lc[ 1 ], L5 ), + LedPwmOutCC( lc[ 1 ], L8 ), + LedPwmOutCC( lc[ 1 ], L11 ), + LedPwmOutCC( lc[ 1 ], L14 ), + LedPwmOutCC( lc[ 1 ], L17 ), + LedPwmOutCC( lc[ 1 ], L20 ), + LedPwmOutCC( lc[ 1 ], L23 ), + LedPwmOutCC( lc[ 0 ], L14 ), + LedPwmOutCC( lc[ 0 ], L17 ), + LedPwmOutCC( lc[ 0 ], L20 ), + LedPwmOutCC( lc[ 0 ], L23 ), + } +}; + + +void simple_loop( void ) +{ + for ( int color = 0; color < 3; color++ ) { + for ( int i = 0; i < 16; i++ ) { + led[ color ][ i ].current( CURRENT_SETTING ); + } + } + + for ( int repeat = 0; repeat < 2; repeat++ ) { + for ( int color = 0; color < 3; color++ ) { + for ( int i = 0; i < 16; i++ ) { + led[ color ][ i ] = 1.0; + wait( 0.02 ); + } + } + for ( int color = 0; color < 3; color++ ) { + for ( int i = 0; i < 16; i++ ) { + led[ color ][ i ] = 0.0; + wait( 0.02 ); + } + } + } +} + +#define N_OF_REPEATS 4 +#define CYCLE_STEPS 256 +#define PI 3.14159265 + +void demo_colors_inphase( void ) +{ + float brightness[ 3 ]; + + for ( int repeat = 0; repeat < 3; repeat++ ) { + for ( int i = 0; i < CYCLE_STEPS; i++ ) { + brightness[ 0 ] = pow( sin( (float)(i + 0) * PI / CYCLE_STEPS ), 4 ); + brightness[ 1 ] = pow( sin( (float)(i + 85) * PI / CYCLE_STEPS ), 4 ); + brightness[ 2 ] = pow( sin( (float)(i + 170) * PI / CYCLE_STEPS ), 4 ); + + for ( int color = 0; color < 3; color++ ) { + for ( int j = 0; j < 16; j++ ) { + led[ color ][ j ] = brightness[ color ]; + } + } + wait( 0.01 ); + } + } +} + +void demo_colors_phase_gap( void ) +{ + for ( int repeat = 0; repeat < 10; repeat++ ) { + for ( int i = 0; i < CYCLE_STEPS; i++ ) { + for ( int j = 0; j < 16; j++ ) { + led[ 0 ][ j ] = pow( sin( (float)(i + 0 + j * 16) * PI / CYCLE_STEPS ), 4 ); + led[ 1 ][ j ] = pow( sin( (float)(i + 85 + j * 16) * PI / CYCLE_STEPS ), 4 ); + led[ 2 ][ j ] = pow( sin( (float)(i + 170 + j * 16) * PI / CYCLE_STEPS ), 4 ); + } + //wait( 0.01 ); + } + } +} + +int main() +{ + i2c.frequency( 400 * 1000 ); + + while( 1 ) { + simple_loop(); + demo_colors_inphase(); + simple_loop(); + demo_colors_phase_gap(); + } +} \ No newline at end of file