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:
- 6:7164a88905c1
- Parent:
- 5:9f89d6e17ff7
File content as of revision 6:7164a88905c1:
#include "MicroBit.h" //dem libraries tho.... don't forget 'em! (MCU specific)
#include "PCA9955A.h"
//Allows each led driver port to be triggered on/off over serial - simply send the relevant Hex character using Putty or similar:
//(0,1,2,3,4,5,6) = segments for character 1,
//(7,8,9,A,B,C,D) = segments for character 2,
//(E,F) = decimal points
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);
}
}
