NXP-Japan Demo-0
/
PCA995x_Hello
テストサンプル
main.cpp
- Committer:
- nxpj0
- Date:
- 2013-10-10
- Revision:
- 0:4d5d59b9fba0
File content as of revision 0:4d5d59b9fba0:
/* * PCA9955 (I2C N_OF_PORTS channel LED driver) demo application * * Released under the MIT License: http://mbed.org/license/mit * * revision 1.0 15-June-2011 / 10-Aug-2012 */ #include "mbed.h" #include "PCA9955.h" #include "PCA9956A.h" #define MAX_IREF 0x20 #define PI 3.14159265 #define LOOP 100 #define CYCLE 1.0 #define N_OF_PORTS 24 //PCA9955 led_driver( p28, p27, 0xC0 ); // SDA, SCL, I2C_slave_sddress PCA9956A led_driver( p28, p27, 0x02 ); // SDA, SCL, I2C_slave_sddress //PCA995x led_driver( p28, p27, 0xC0, N_OF_PORTS ); // SDA, SCL, I2C_slave_sddress DigitalOut syncpin( p21 ); void demo_0( void ); void demo_1( void ); void demo_2( void ); void demo_FF( void ); main() { while ( 1 ) { demo_2(); demo_0(); demo_1(); //demo_FF(); } } void demo_0( void ) { int i; srand( 0xFF00 ); led_driver = (int)0x0000; led_driver.set_all_intensity( 0xFF ); // PWM led_driver.set_all_intensity( MAX_IREF, true ); // IREF for ( i = 0; i < 128; i++ ) { led_driver = 0x0001 << (rand() % N_OF_PORTS); wait( 0.05 ); } } void demo_1( void ) { char v[ N_OF_PORTS ] = { 0xFF }; int sel; int i; srand( 0xFF00 ); led_driver = 0xFFFFFF; led_driver.set_all_intensity( v ); // PWM led_driver.set_all_intensity( MAX_IREF, true ); // IREF for ( i = 0; i < 256; i++ ) { for ( sel = 0; sel < N_OF_PORTS; sel++ ) { v[ sel ] = (char)((float)(v[ sel ]) * 0.8); } v[ rand() % N_OF_PORTS ] = 0xFF; led_driver.set_all_intensity( v ); // PWM wait( 0.05 ); } } void demo_2( void ) { int demo_loop; char intensity[ 3 ]; char pwms[ N_OF_PORTS ]; int color; int sel; int i; led_driver = 0xFFFFFF; led_driver.set_all_intensity( (char)0x00 ); // PWM led_driver.set_all_intensity( MAX_IREF, true ); // IREF #if 0 for ( i = 0; i < 10; i++ ) { led_driver.write( PCA9956A::LEDOUT0, i & 1 ? (char)0x55 : (char)0x00 ); wait( 0.2 ); } #endif for ( demo_loop = 0; demo_loop < 10; demo_loop++ ) { for ( i = 0; i < 100; i++ ) { for ( color = 0; color < 3; color++ ) { intensity[ color ] = (char)(pow(sin( (((float)i * PI) / (float)LOOP) + (color * (PI / 3.0))), 4) * 0xFF); } for ( sel = 0; sel < N_OF_PORTS; sel++ ) { pwms[ sel ] = intensity[ sel % 3 ]; led_driver.set_all_intensity( pwms ); } wait( (float)CYCLE / (float)LOOP ); } } } #if 0 void demo_FF( void ) { unsigned short flags; unsigned int i; syncpin = 1; led_driver = 0xFFFF; led_driver.set_all_intensity( 0x7F ); // PWM printf( "\r\n\r\nFAULTTEST\r\n" ); while ( 1 ) { for ( i = 0; i < 256; i++ ) { led_driver.set_all_intensity( (char)i, true ); // IREF syncpin = 0; flags = led_driver.fault_test(); syncpin = 1; // printf( "IREF=0x%02X : flags = 0x%04X\r\n", i, flags ); printf( "IREF=0x%02X : flags = 0x%04X\r", i, flags ); //wait_ms( 100 ); } } } #endif #if 0 main() { char v[ N_OF_PORTS ] = { 0xFF }; int sel; srand( 0 ); led_driver = 0xFFFFFF; led_driver.set_all_intensity( v ); // PWM led_driver.set_all_intensity( MAX_IREF, true ); // IREF while ( 1 ) { for ( sel = 0; sel < N_OF_PORTS; sel++ ) { v[ sel ] = (char)((float)(v[ sel ]) * 0.8); } v[ rand() % N_OF_PORTS ] = 0xFF; led_driver.set_all_intensity( v ); // PWM wait( 0.05 ); } } #endif