Program to demonstrate NXP semiconductor's PCA9955B chip working with the BBC micro:bit
Dependencies: PCA995xA microbit
Fork of PCA9955A_Hello by
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...
Revision 5:9f89d6e17ff7, committed 2018-08-14
- Comitter:
- tb942
- Date:
- Tue Aug 14 18:31:16 2018 +0000
- Parent:
- 4:fa025bb69dab
- Child:
- 6:7164a88905c1
- Commit message:
Changed in this revision
--- a/PCA995xA.lib Thu Mar 19 10:50:03 2015 +0000 +++ b/PCA995xA.lib Tue Aug 14 18:31:16 2018 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/nxp_ip/code/PCA995xA/#cb07190e05e7 +https://os.mbed.com/users/tb942/code/PCA995xA/#56a45c690801
--- a/main.cpp Thu Mar 19 10:50:03 2015 +0000
+++ b/main.cpp Tue Aug 14 18:31:16 2018 +0000
@@ -1,32 +1,63 @@
-#include "mbed.h"
+#include "MicroBit.h" //dem libraries tho.... don't forget 'em! (MCU specific)
#include "PCA9955A.h"
-PCA9955A led_cntlr( p28, p27, 0x02 ); // SDA, SCL, Slave_address(option)
-LedPwmOutCC led0( led_cntlr, L0 ); // Instance for LED0 pin
-LedPwmOutCC led1( led_cntlr, L1 ); // Instance for LED1 pin
-LedPwmOutCC led2( led_cntlr, L2 ); // Instance for LED2 pin
+PCA9955A led_cntlr(I2C_SDA0, I2C_SCL0 , 0x3f<<1); //SDA, SCL, Slave_address(option)
+MicroBitSerial pc(USBTX, USBRX);
+
+void lightIt(int, int); //function to turn on specific LEDs
+void cutItA (); //function to turn off left hand LEDs
+void cutItB (); //function to turn off right hand LEDs
+void cutItC (); //function to turn off decimal point LEDs
+int state[16];
int main()
-{
- led0.current( 0.5 ); // LED0 pin current output setting to 50%
- led1.current( 0.5 ); // LED1 pin current output setting to 50%
- led2.current( 0.5 ); // LED2 pin current output setting to 50%
+{ //Set the operate enable pin low (it's inverted)
+ led_cntlr.current( ALLPORTS, 1 ); //Set all outputs to max current
+
- while(1) {
-
- for ( float p = 1.0; p >= 0.0; p -= 0.01 ) {
- led0 = p; // Set LED0 output PWM dutycycle as 'p'
- wait( 0.01 );
- }
-
- for ( float p = 1.0; p >= 0.0; p -= 0.01 ) {
- led1 = p; // Set LED1 output PWM dutycycle as 'p'
- wait( 0.01 );
- }
-
- for ( float p = 1.0; p >= 0.0; p -= 0.01 ) {
- led2 = p; // Set LED2 output PWM dutycycle as 'p'
- wait( 0.01 );
+ while(1){
+ if (pc.readable()){ //If there's serial data available
+ char sc = pc.getc(); //Read it
+ int s = (int)sc;
+ if (s > 96)
+ s = s - 87;
+ else if (s > 47)
+ s = s - 48;
+ if (s < 16){
+ state[s] = !state[s];
+ int onoff = state[s];
+ lightIt(s,onoff);
+ }
+ else if (s == 33){
+ cutItA();
+ cutItB();
+ cutItC();
+ for(int i = 0; i < 16; i++)
+ state[i] = 0;
+ }
+ pc.printf("%d",s);
}
}
}
+
+void lightIt (int led, int o){
+ led_cntlr.pwm(led,o);
+}
+
+void cutItA () { //When called display reset LEDs on left hand side
+ for ( int i = 0; i < 7; i++ ){
+ led_cntlr.pwm(i,0);
+ }
+}
+
+void cutItB () { //When called display reset LEDs on right hand side
+ for ( int i = 7; i < 14; i++ ){
+ led_cntlr.pwm(i,0);
+ }
+}
+
+void cutItC () { //When called display reset LEDs on right hand side
+ for ( int i = 14; i < 16; i++ ){
+ led_cntlr.pwm(i,0);
+ }
+}
\ No newline at end of file
--- a/mbed.bld Thu Mar 19 10:50:03 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/9ad691361fac \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/microbit.lib Tue Aug 14 18:31:16 2018 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/tb942/code/microbit/#1c4eb744a764
