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.

I2C 8x8 LED matrix board" from Switch Science

Committer:
nxp_ip
Date:
Wed Dec 03 08:12:38 2014 +0000
Revision:
0:fa07b945e836
initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nxp_ip 0:fa07b945e836 1 /**
nxp_ip 0:fa07b945e836 2 * A demo code for the PCA9622 LED 8x8 library
nxp_ip 0:fa07b945e836 3 *
nxp_ip 0:fa07b945e836 4 * @author Tedd OKANO
nxp_ip 0:fa07b945e836 5 * @version 1.0
nxp_ip 0:fa07b945e836 6 * @date 03-Dec-2014
nxp_ip 0:fa07b945e836 7 *
nxp_ip 0:fa07b945e836 8 * This is a sample demo code for the PCA9622_LED8x8 library.
nxp_ip 0:fa07b945e836 9 * Target hardware : "I2C 8x8 LED matrix board" from Switch Science
nxp_ip 0:fa07b945e836 10 * https://www.switch-science.com/catalog/2071/
nxp_ip 0:fa07b945e836 11 *
nxp_ip 0:fa07b945e836 12 * The I2C LED controller PCA9622 is used on this module
nxp_ip 0:fa07b945e836 13 * that ebables to control the LEDs with PWM brightness control.
nxp_ip 0:fa07b945e836 14 *
nxp_ip 0:fa07b945e836 15 * For more information about the PCA9622:
nxp_ip 0:fa07b945e836 16 * http://www.nxp.com/documents/data_sheet/PCA9622.pdf
nxp_ip 0:fa07b945e836 17 */
nxp_ip 0:fa07b945e836 18
nxp_ip 0:fa07b945e836 19 #include "mbed.h"
nxp_ip 0:fa07b945e836 20 #include "PCA9622_LED8x8.h"
nxp_ip 0:fa07b945e836 21
nxp_ip 0:fa07b945e836 22 // Choose a target platform from next list
nxp_ip 0:fa07b945e836 23 PCA9622_LED8x8 matrix( p28, p27 ); // for 40pin type mbed
nxp_ip 0:fa07b945e836 24 //PCA9622_LED8x8 matrix( D14, D15 ); // for Arduino type mbed
nxp_ip 0:fa07b945e836 25 //PCA9622_LED8x8 matrix( dp5, dp27 ); // for mbed LPC1114
nxp_ip 0:fa07b945e836 26
nxp_ip 0:fa07b945e836 27 Ticker _ticker;
nxp_ip 0:fa07b945e836 28 int demo_mode = 0;
nxp_ip 0:fa07b945e836 29
nxp_ip 0:fa07b945e836 30 void demo_mode_change();
nxp_ip 0:fa07b945e836 31 float func0( int x, int y, int t ); // function to make 8x8 image
nxp_ip 0:fa07b945e836 32 float func1( int x, int y, int t ); // function to make 8x8 image
nxp_ip 0:fa07b945e836 33 float func2( int x, int y, int t ); // function to make 8x8 image
nxp_ip 0:fa07b945e836 34 float func3( int x, int y, int t ); // function to make 8x8 image
nxp_ip 0:fa07b945e836 35
nxp_ip 0:fa07b945e836 36 typedef float (*func_ptr)( int x, int y, int t );
nxp_ip 0:fa07b945e836 37
nxp_ip 0:fa07b945e836 38 func_ptr fp[] = {
nxp_ip 0:fa07b945e836 39 func0,
nxp_ip 0:fa07b945e836 40 func1,
nxp_ip 0:fa07b945e836 41 func2,
nxp_ip 0:fa07b945e836 42 func3
nxp_ip 0:fa07b945e836 43 };
nxp_ip 0:fa07b945e836 44
nxp_ip 0:fa07b945e836 45 int main()
nxp_ip 0:fa07b945e836 46 {
nxp_ip 0:fa07b945e836 47 float image[ 8 ][ 8 ]; //
nxp_ip 0:fa07b945e836 48 int count = 0;
nxp_ip 0:fa07b945e836 49
nxp_ip 0:fa07b945e836 50 _ticker.attach( &demo_mode_change, 10 );
nxp_ip 0:fa07b945e836 51 matrix.start();
nxp_ip 0:fa07b945e836 52
nxp_ip 0:fa07b945e836 53 while(1) {
nxp_ip 0:fa07b945e836 54
nxp_ip 0:fa07b945e836 55 // making 8x8 image to "image" array
nxp_ip 0:fa07b945e836 56 for ( int i = 0; i < 8; i++ )
nxp_ip 0:fa07b945e836 57 for ( int j = 0; j < 8; j++ )
nxp_ip 0:fa07b945e836 58 image[ i ][ j ] = (*fp[ demo_mode % (sizeof( fp ) / sizeof( func_ptr )) ])( i, j, count );
nxp_ip 0:fa07b945e836 59
nxp_ip 0:fa07b945e836 60 // set the image into library internal bufer
nxp_ip 0:fa07b945e836 61 matrix.set_data( image );
nxp_ip 0:fa07b945e836 62
nxp_ip 0:fa07b945e836 63 count++;
nxp_ip 0:fa07b945e836 64 wait( 0.05 );
nxp_ip 0:fa07b945e836 65 }
nxp_ip 0:fa07b945e836 66 }
nxp_ip 0:fa07b945e836 67
nxp_ip 0:fa07b945e836 68 void demo_mode_change()
nxp_ip 0:fa07b945e836 69 {
nxp_ip 0:fa07b945e836 70 demo_mode++;
nxp_ip 0:fa07b945e836 71 }
nxp_ip 0:fa07b945e836 72
nxp_ip 0:fa07b945e836 73 float func0( int x, int y, int t )
nxp_ip 0:fa07b945e836 74 {
nxp_ip 0:fa07b945e836 75 // NXP logo
nxp_ip 0:fa07b945e836 76
nxp_ip 0:fa07b945e836 77 static char bm_nxp[] = {
nxp_ip 0:fa07b945e836 78 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
nxp_ip 0:fa07b945e836 79
nxp_ip 0:fa07b945e836 80 0xFF, 0xFF, 0xFF, 0xF0, 0x78, 0x3C, 0x1E, 0x0F,
nxp_ip 0:fa07b945e836 81 0xFF, 0x7E, 0xBD, 0xDB, 0xE7, 0x7E, 0x3C, 0x18,
nxp_ip 0:fa07b945e836 82 0x3C, 0x7E, 0xE7, 0xDB, 0xBD, 0x7E, 0xFF, 0xCC,
nxp_ip 0:fa07b945e836 83 0xCC, 0xCC, 0xCC, 0xCC, 0xFC, 0x78, 0x78,
nxp_ip 0:fa07b945e836 84
nxp_ip 0:fa07b945e836 85 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
nxp_ip 0:fa07b945e836 86 };
nxp_ip 0:fa07b945e836 87
nxp_ip 0:fa07b945e836 88 int index;
nxp_ip 0:fa07b945e836 89 int direction = 0;
nxp_ip 0:fa07b945e836 90
nxp_ip 0:fa07b945e836 91 direction = (t / (sizeof( bm_nxp ) - 8)) & 0x1;
nxp_ip 0:fa07b945e836 92 index = (t % (sizeof( bm_nxp ) - 8));
nxp_ip 0:fa07b945e836 93 index = direction ? (sizeof( bm_nxp ) - 8) - index : index;
nxp_ip 0:fa07b945e836 94 index = index + y;
nxp_ip 0:fa07b945e836 95
nxp_ip 0:fa07b945e836 96 return (bm_nxp[ index ] >> (7 - x)) & 0x1;
nxp_ip 0:fa07b945e836 97 }
nxp_ip 0:fa07b945e836 98
nxp_ip 0:fa07b945e836 99 float func1( int x, int y, int t )
nxp_ip 0:fa07b945e836 100 {
nxp_ip 0:fa07b945e836 101 // ripple
nxp_ip 0:fa07b945e836 102
nxp_ip 0:fa07b945e836 103 const float display_offset = 3.5;
nxp_ip 0:fa07b945e836 104 //const float display_offset = 0.0;
nxp_ip 0:fa07b945e836 105 const float size = 0.3;
nxp_ip 0:fa07b945e836 106 const float eccentricity_cycle = 0.0;
nxp_ip 0:fa07b945e836 107 const float eccentricity_amplitude = 0.0;
nxp_ip 0:fa07b945e836 108
nxp_ip 0:fa07b945e836 109 float xx;
nxp_ip 0:fa07b945e836 110 float yy;
nxp_ip 0:fa07b945e836 111 float tt;
nxp_ip 0:fa07b945e836 112
nxp_ip 0:fa07b945e836 113 float s;
nxp_ip 0:fa07b945e836 114
nxp_ip 0:fa07b945e836 115 xx = ((float)x - display_offset + eccentricity_amplitude * sin( (float)t * eccentricity_cycle )) * size;
nxp_ip 0:fa07b945e836 116 yy = ((float)y - display_offset + eccentricity_amplitude * cos( (float)t * eccentricity_cycle )) * size;
nxp_ip 0:fa07b945e836 117 tt = sin( (float)t * 0.2 ) + sin( (float)t * 0.1 );
nxp_ip 0:fa07b945e836 118
nxp_ip 0:fa07b945e836 119 s = cos( powf( xx * xx + yy * yy, 0.5 ) - tt );
nxp_ip 0:fa07b945e836 120 return ( powf( s, 4.0 ) );
nxp_ip 0:fa07b945e836 121 }
nxp_ip 0:fa07b945e836 122
nxp_ip 0:fa07b945e836 123 float func2( int x, int y, int t )
nxp_ip 0:fa07b945e836 124 {
nxp_ip 0:fa07b945e836 125 // moving dot
nxp_ip 0:fa07b945e836 126
nxp_ip 0:fa07b945e836 127 const float display_offset = 3.5;
nxp_ip 0:fa07b945e836 128 //const float display_offset = 0.0;
nxp_ip 0:fa07b945e836 129 const float size = 0.3;
nxp_ip 0:fa07b945e836 130 const float eccentricity_cycle = 0.25;
nxp_ip 0:fa07b945e836 131 const float eccentricity_amplitude = 2.5;
nxp_ip 0:fa07b945e836 132
nxp_ip 0:fa07b945e836 133 float xx;
nxp_ip 0:fa07b945e836 134 float yy;
nxp_ip 0:fa07b945e836 135 float tt;
nxp_ip 0:fa07b945e836 136 float s;
nxp_ip 0:fa07b945e836 137 float d;
nxp_ip 0:fa07b945e836 138
nxp_ip 0:fa07b945e836 139
nxp_ip 0:fa07b945e836 140 xx = ((float)x - display_offset + eccentricity_amplitude * sin( (float)t * eccentricity_cycle )) * size;
nxp_ip 0:fa07b945e836 141 yy = ((float)y - display_offset + eccentricity_amplitude * cos( (float)t * eccentricity_cycle )) * size;
nxp_ip 0:fa07b945e836 142 tt = (float)t * 0.2;
nxp_ip 0:fa07b945e836 143 d = powf( xx * xx + yy * yy, 0.5 ) - tt * 0.0;
nxp_ip 0:fa07b945e836 144 d = d == 0.0 ? 1e-12 : d;
nxp_ip 0:fa07b945e836 145 d *= 4.0;
nxp_ip 0:fa07b945e836 146
nxp_ip 0:fa07b945e836 147 s = sin( d ) / d;
nxp_ip 0:fa07b945e836 148 return ( powf( s, 4.0 ) );
nxp_ip 0:fa07b945e836 149 }
nxp_ip 0:fa07b945e836 150
nxp_ip 0:fa07b945e836 151 float func3( int x, int y, int t )
nxp_ip 0:fa07b945e836 152 {
nxp_ip 0:fa07b945e836 153 // ripple with offset
nxp_ip 0:fa07b945e836 154
nxp_ip 0:fa07b945e836 155 const float display_offset = 3.5;
nxp_ip 0:fa07b945e836 156 //const float display_offset = 0.0;
nxp_ip 0:fa07b945e836 157 const float size = 0.3;
nxp_ip 0:fa07b945e836 158 const float eccentricity_cycle = 0.25;
nxp_ip 0:fa07b945e836 159 const float eccentricity_amplitude = 2.5;
nxp_ip 0:fa07b945e836 160
nxp_ip 0:fa07b945e836 161 float xx;
nxp_ip 0:fa07b945e836 162 float yy;
nxp_ip 0:fa07b945e836 163 float tt;
nxp_ip 0:fa07b945e836 164
nxp_ip 0:fa07b945e836 165 float s;
nxp_ip 0:fa07b945e836 166
nxp_ip 0:fa07b945e836 167 xx = ((float)x - display_offset + eccentricity_amplitude * sin( (float)t * eccentricity_cycle )) * size;
nxp_ip 0:fa07b945e836 168 yy = ((float)y - display_offset + eccentricity_amplitude * cos( (float)t * eccentricity_cycle )) * size;
nxp_ip 0:fa07b945e836 169 tt = (float)t * 0.2;
nxp_ip 0:fa07b945e836 170
nxp_ip 0:fa07b945e836 171 s = cos( powf( xx * xx + yy * yy, 0.5 ) - tt );
nxp_ip 0:fa07b945e836 172 return ( powf( s, 4.0 ) );
nxp_ip 0:fa07b945e836 173 }
nxp_ip 0:fa07b945e836 174