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...
main.cpp
- Committer:
- tb942
- Date:
- 2018-08-14
- Revision:
- 5:9f89d6e17ff7
- Parent:
- 3:a67c21ad4173
- Child:
- 6:7164a88905c1
File content as of revision 5:9f89d6e17ff7:
#include "MicroBit.h" //dem libraries tho.... don't forget 'em! (MCU specific) #include "PCA9955A.h" 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() { //Set the operate enable pin low (it's inverted) led_cntlr.current( ALLPORTS, 1 ); //Set all outputs to max current 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); } }