This is a simple demo code for the PCA9622_LED8x8 library. arget hardware : "I2C 8x8 LED matrix board" from Switch Science https://www.switch-science.com/catalog/2071/
Dependencies: PCA9622_LED8x8 mbed
Demo program for LED matrix.
4 patterns of moving image are available.
Since the hello world program is too simple, this program has been made for demo purpose ;)
Very simple hello world program is available here.
Import programPCA9622_LED8x8_Hello
This is a very simple sample code for the PCA9622_LED8x8 library. arget hardware : "I2C 8x8 LED matrix board" from Switch Science https://www.switch-science.com/catalog/2071/
Component page is available
Please refer to the component page for for more information.
main.cpp
- Committer:
- nxp_ip
- Date:
- 2015-02-26
- Revision:
- 1:aede5927109a
- Parent:
- 0:fa07b945e836
File content as of revision 1:aede5927109a:
/** * A demo code for the PCA9622 LED 8x8 library * * @author Tedd OKANO * @version 1.0 * @date 03-Dec-2014 * * This is a sample demo code for the PCA9622_LED8x8 library. * Target hardware : "I2C 8x8 LED matrix board" from Switch Science * https://www.switch-science.com/catalog/2071/ * * The I2C LED controller PCA9622 is used on this module * that ebables to control the LEDs with PWM brightness control. * * For more information about the PCA9622: * http://www.nxp.com/documents/data_sheet/PCA9622.pdf */ #include "mbed.h" #include "PCA9622_LED8x8.h" // Choose a target platform from next list PCA9622_LED8x8 matrix( p28, p27 ); // for 40pin type mbed //PCA9622_LED8x8 matrix( D14, D15 ); // for Arduino type mbed //PCA9622_LED8x8 matrix( dp5, dp27 ); // for mbed LPC1114 Ticker _ticker; int demo_mode = 0; void demo_mode_change(); float func0( int x, int y, int t ); // function to make 8x8 image float func1( int x, int y, int t ); // function to make 8x8 image float func2( int x, int y, int t ); // function to make 8x8 image float func3( int x, int y, int t ); // function to make 8x8 image typedef float (*func_ptr)( int x, int y, int t ); func_ptr fp[] = { func0, func1, func2, func3 }; int main() { float image[ 8 ][ 8 ]; // int count = 0; _ticker.attach( &demo_mode_change, 10 ); matrix.start(); while(1) { // making 8x8 image to "image" array for ( int i = 0; i < 8; i++ ) for ( int j = 0; j < 8; j++ ) image[ i ][ j ] = (*fp[ demo_mode % (sizeof( fp ) / sizeof( func_ptr )) ])( i, j, count ); // set the image into library internal bufer matrix.set_data( image ); count++; wait( 0.05 ); } } void demo_mode_change() { demo_mode++; } float func0( int x, int y, int t ) { // NXP logo static char bm_nxp[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xF0, 0x78, 0x3C, 0x1E, 0x0F, 0xFF, 0x7E, 0xBD, 0xDB, 0xE7, 0x7E, 0x3C, 0x18, 0x3C, 0x7E, 0xE7, 0xDB, 0xBD, 0x7E, 0xFF, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xFC, 0x78, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; int index; int direction = 0; direction = (t / (sizeof( bm_nxp ) - 8)) & 0x1; index = (t % (sizeof( bm_nxp ) - 8)); index = direction ? (sizeof( bm_nxp ) - 8) - index : index; index = index + y; return (bm_nxp[ index ] >> (7 - x)) & 0x1; } float func1( int x, int y, int t ) { // ripple const float display_offset = 3.5; //const float display_offset = 0.0; const float size = 0.3; const float eccentricity_cycle = 0.0; const float eccentricity_amplitude = 0.0; float xx; float yy; float tt; float s; xx = ((float)x - display_offset + eccentricity_amplitude * sin( (float)t * eccentricity_cycle )) * size; yy = ((float)y - display_offset + eccentricity_amplitude * cos( (float)t * eccentricity_cycle )) * size; tt = sin( (float)t * 0.2 ) + sin( (float)t * 0.1 ); s = cos( powf( xx * xx + yy * yy, 0.5 ) - tt ); return ( powf( s, 4.0 ) ); } float func2( int x, int y, int t ) { // moving dot const float display_offset = 3.5; //const float display_offset = 0.0; const float size = 0.3; const float eccentricity_cycle = 0.25; const float eccentricity_amplitude = 2.5; float xx; float yy; float tt; float s; float d; xx = ((float)x - display_offset + eccentricity_amplitude * sin( (float)t * eccentricity_cycle )) * size; yy = ((float)y - display_offset + eccentricity_amplitude * cos( (float)t * eccentricity_cycle )) * size; tt = (float)t * 0.2; d = powf( xx * xx + yy * yy, 0.5 ) - tt * 0.0; d = d == 0.0 ? 1e-12 : d; d *= 4.0; s = sin( d ) / d; return ( powf( s, 4.0 ) ); } float func3( int x, int y, int t ) { // ripple with offset const float display_offset = 3.5; //const float display_offset = 0.0; const float size = 0.3; const float eccentricity_cycle = 0.25; const float eccentricity_amplitude = 2.5; float xx; float yy; float tt; float s; xx = ((float)x - display_offset + eccentricity_amplitude * sin( (float)t * eccentricity_cycle )) * size; yy = ((float)y - display_offset + eccentricity_amplitude * cos( (float)t * eccentricity_cycle )) * size; tt = (float)t * 0.2; s = cos( powf( xx * xx + yy * yy, 0.5 ) - tt ); return ( powf( s, 4.0 ) ); }