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