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.
Revision 0:fa07b945e836, committed 2014-12-03
- Comitter:
- nxp_ip
- Date:
- Wed Dec 03 08:12:38 2014 +0000
- Child:
- 1:aede5927109a
- Commit message:
- initial version
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PCA9622_LED8x8.lib Wed Dec 03 08:12:38 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/nxp_ip/code/PCA9622_LED8x8/#41234a8149bd
--- /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 ) );
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Dec 03 08:12:38 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/4fc01daae5a5 \ No newline at end of file
