![](/media/cache/profiles/795c7a7a5ec6b460ec00c5841019b9e9.jpg.50x50_q85.jpg)
PCA9956B (24ch LED controller). Simple 2 demoboards operation.
Simple demo code for two PCA9956B demo boards.
main.cpp
- Committer:
- okano
- Date:
- 2015-07-22
- Revision:
- 0:c0060f6e9b43
File content as of revision 0:c0060f6e9b43:
#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(); } }