Program to demonstrate NXP semiconductor's PCA9955B chip working with the BBC micro:bit

Dependencies:   PCA995xA microbit

Fork of PCA9955A_Hello by InetrfaceProducts NXP

This is a simple program that allows you to control each port on a PCA9955B connected over i2c to a BBC micro:bit using a simple USB serial communication program.

I've written it to work with the 2 digit SMD soldering kit I designed. Drop me an email at tb942@hotmail.co.uk for further info on that...

main.cpp

Committer:
nxp_ip
Date:
2015-03-04
Revision:
2:cfa5103184b1
Parent:
1:8b5c26cc269c
Child:
3:a67c21ad4173

File content as of revision 2:cfa5103184b1:

#include "mbed.h"

#include "PCA9955A.h"
PCA9955A    led_cntlr( p28, p27, 0x02 );    //  SDA, SCL, Slave_address(option)

int main()
{
    led_cntlr.current( ALLPORTS, 1.0 ); //  Set all ports output current 100%

    while(1) {
        for ( int port = 0; port < led_cntlr.number_of_ports(); port++ ) {
            for ( int i = 1; i <= 100; i++ ) {
                led_cntlr.pwm(  port, (float)i / 100.0 );
                wait( 0.01 );
            }
        }
        led_cntlr.pwm( ALLPORTS, 0.0 ); //  Set all ports output PWM 0%
    }
}



#if 0  //  Sample of using LedPwmOut API
#include "mbed.h"
#include "PCA9955A.h"

PCA9955A    led_cntlr( p28, p27, 0x02 );
LedPwmOutCC   leds[]  = {
    LedPwmOutCC( led_cntlr, L0  ),
    LedPwmOutCC( led_cntlr, L4  ),
    LedPwmOutCC( led_cntlr, L8  ),
    LedPwmOutCC( led_cntlr, L12 ),

    LedPwmOutCC( led_cntlr, L1  ),
    LedPwmOutCC( led_cntlr, L5  ),
    LedPwmOutCC( led_cntlr, L9  ),
    LedPwmOutCC( led_cntlr, L13 ),

    LedPwmOutCC( led_cntlr, L2  ),
    LedPwmOutCC( led_cntlr, L6  ),
    LedPwmOutCC( led_cntlr, L10  ),
    LedPwmOutCC( led_cntlr, L14 ),

    LedPwmOutCC( led_cntlr, L3  ),
    LedPwmOutCC( led_cntlr, L7  ),
    LedPwmOutCC( led_cntlr, L11  ),
    LedPwmOutCC( led_cntlr, L15 ),

};

int main()
{
    for ( int ch = 0; ch < 16; ch++ )
        leds[ ch ]  = 1.0;
    for ( int ch = 0; ch < 16; ch++ )
        leds[ ch ].current( 0.0 );

    while(1) {
        for ( int ch = 0; ch < 16; ch++ ) {
            for ( float p = 0.0; p < 1.0; p += 0.01 ) {
//                leds[ ch ]  = p;
                leds[ ch ].current( p );
                wait( 0.01 );
            }
        }
        for ( float c = 1.0; c > 0.0; c -= 0.01 ) {
            for ( int ch = 0; ch < 16; ch++ ) {
                leds[ ch ].current( c );

            }
            wait( 0.01 );
        }
    }
}
#endif