A sample code for training. Using LPCXpresso baseboard. This program let 16 LEDs blink via I2C (PCA9532). Addition to that, the LED dim control is done by light sensor (ISL29003) output.

Dependencies:   mbed

Committer:
okano
Date:
Tue Feb 16 05:05:28 2010 +0000
Revision:
0:6502de955845

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okano 0:6502de955845 1 /*
okano 0:6502de955845 2 * mbed + LPCXpresso_baseboard demo code
okano 0:6502de955845 3 *
okano 0:6502de955845 4 * This code has been made for a training session.
okano 0:6502de955845 5 *
okano 0:6502de955845 6 * With this code, the mbed drives PCA9532 to control 16 LEDs.
okano 0:6502de955845 7 * The LED blinked in pattern.
okano 0:6502de955845 8 *
okano 0:6502de955845 9 * On this demo, the ISL29003 is also driven to get ambient
okano 0:6502de955845 10 * light level. The ambient light get dark, the LED blightness
okano 0:6502de955845 11 * get low. The LEDs are controlled by PWM function of PCA9532.
okano 0:6502de955845 12 *
okano 0:6502de955845 13 * Copyright (c) 2010 NXP Semiconductors Japan
okano 0:6502de955845 14 * Released under the MIT License: http://mbed.org/license/mit
okano 0:6502de955845 15 *
okano 0:6502de955845 16 * revision 1.0 16-Feb-2010 1st release
okano 0:6502de955845 17 */
okano 0:6502de955845 18
okano 0:6502de955845 19 #include "mbed.h"
okano 0:6502de955845 20
okano 0:6502de955845 21 I2C i2c( p28, p27 );
okano 0:6502de955845 22 Serial pc( USBTX, USBRX );
okano 0:6502de955845 23
okano 0:6502de955845 24 const int PCA9532_addr = 0xC0;
okano 0:6502de955845 25 const int ISL29003_addr = 0x88;
okano 0:6502de955845 26
okano 0:6502de955845 27 class baseboard_led_array {
okano 0:6502de955845 28 public:
okano 0:6502de955845 29
okano 0:6502de955845 30 baseboard_led_array() {
okano 0:6502de955845 31 }
okano 0:6502de955845 32
okano 0:6502de955845 33 ~baseboard_led_array() {
okano 0:6502de955845 34 }
okano 0:6502de955845 35
okano 0:6502de955845 36 void operator=( int c ) {
okano 0:6502de955845 37
okano 0:6502de955845 38 char a[ 5 ] = { 0x16, 0x00, 0x00, 0x00, 0x00 };
okano 0:6502de955845 39 const char v = 0x2;
okano 0:6502de955845 40
okano 0:6502de955845 41 for ( int i = 0; i < 16; i++ )
okano 0:6502de955845 42 a[ (i / 4) + 1 ] |= (((c >> i) & 0x1) ? v : 0x0) << ((i % 4) << 1);
okano 0:6502de955845 43
okano 0:6502de955845 44 i2c.write( PCA9532_addr, a, 5 );
okano 0:6502de955845 45 }
okano 0:6502de955845 46
okano 0:6502de955845 47 void pwm0( char c ) {
okano 0:6502de955845 48 char cmd[ 2 ];
okano 0:6502de955845 49
okano 0:6502de955845 50 cmd[ 0 ] = 0x03;
okano 0:6502de955845 51 cmd[ 1 ] = c;
okano 0:6502de955845 52 i2c.write( PCA9532_addr, cmd, 2 );
okano 0:6502de955845 53 }
okano 0:6502de955845 54 };
okano 0:6502de955845 55
okano 0:6502de955845 56
okano 0:6502de955845 57 class light_sensor {
okano 0:6502de955845 58 public:
okano 0:6502de955845 59
okano 0:6502de955845 60 light_sensor() {
okano 0:6502de955845 61 char cmd[ 2 ];
okano 0:6502de955845 62
okano 0:6502de955845 63 cmd[ 0 ] = 0x00;
okano 0:6502de955845 64 cmd[ 1 ] = 0x80;
okano 0:6502de955845 65 i2c.write( ISL29003_addr, cmd, 2 );
okano 0:6502de955845 66
okano 0:6502de955845 67 cmd[ 0 ] = 0x01;
okano 0:6502de955845 68 cmd[ 1 ] = 0x00;
okano 0:6502de955845 69 i2c.write( ISL29003_addr, cmd, 2 );
okano 0:6502de955845 70 }
okano 0:6502de955845 71
okano 0:6502de955845 72 ~light_sensor() {
okano 0:6502de955845 73 }
okano 0:6502de955845 74
okano 0:6502de955845 75 operator short( void ) {
okano 0:6502de955845 76
okano 0:6502de955845 77 short v;
okano 0:6502de955845 78 char cmd;
okano 0:6502de955845 79
okano 0:6502de955845 80 cmd = 0x04;
okano 0:6502de955845 81 i2c.write( ISL29003_addr, &cmd, 1 );
okano 0:6502de955845 82 i2c.read( ISL29003_addr, &cmd, 1 );
okano 0:6502de955845 83 v = cmd;
okano 0:6502de955845 84
okano 0:6502de955845 85 cmd = 0x05;
okano 0:6502de955845 86 i2c.write( ISL29003_addr, &cmd, 1 );
okano 0:6502de955845 87 i2c.read( ISL29003_addr, &cmd, 1 );
okano 0:6502de955845 88
okano 0:6502de955845 89 return( (((short)cmd) << 8) | v );
okano 0:6502de955845 90 }
okano 0:6502de955845 91 };
okano 0:6502de955845 92
okano 0:6502de955845 93 baseboard_led_array ledarr;
okano 0:6502de955845 94 light_sensor sensor;
okano 0:6502de955845 95
okano 0:6502de955845 96 int main() {
okano 0:6502de955845 97
okano 0:6502de955845 98 unsigned long c = 0x00000F0F;
okano 0:6502de955845 99 short b;
okano 0:6502de955845 100
okano 0:6502de955845 101 while ( 1 ) {
okano 0:6502de955845 102
okano 0:6502de955845 103 b = sensor >> 6;
okano 0:6502de955845 104 ledarr.pwm0( b > 255 ? 255 : (char)b );
okano 0:6502de955845 105
okano 0:6502de955845 106 c <<= 1;
okano 0:6502de955845 107 c |= c & 0x10000 ? 0x1 : 0x0;
okano 0:6502de955845 108 ledarr = c;
okano 0:6502de955845 109
okano 0:6502de955845 110 wait( 0.05 );
okano 0:6502de955845 111 }
okano 0:6502de955845 112 }
okano 0:6502de955845 113