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.
Diff: main.cpp
- Revision:
- 0:fa07b945e836
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Dec 03 08:12:38 2014 +0000 @@ -0,0 +1,174 @@ +/** + * 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 ) ); +} +