Johan Kritzinger
/
FRDMKL25Z-ShiftBrite
A few classes to interface one or more ShiftBrite module to the FRDM KL25Z.
main.cpp
- Committer:
- JoKer
- Date:
- 2014-08-20
- Revision:
- 3:9376bf1f1bbd
- Parent:
- 2:3935d2ed40cd
- Child:
- 4:d2f8ddb423e2
File content as of revision 3:9376bf1f1bbd:
#include "mbed.h" #include "sbDriver.h" #include "movie.h" /*MUST TRY THIS!!!! Inheritance is one of the great features of object oriented languages like C++. The stream methods are not included in serial to allow you to use them in other classes as well. They are for example also included in the TextLCD class and in my enhanced TextLCD class. All you need to do to make use of the powerful printf features is implement a putc() method in your own new class. from https://mbed.org/questions/1029/pcprintf-a-method/ */ //6 leds example. Format it suitably for easy reading unsigned short int aMovie[] = { /* LED1 LED2 LED3 LED4 LED5 LED6 */ 1023,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, /*Frame 0*/ 0,0,0, 1023,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, /*Frame 1*/ 0,0,0, 0,0,0, 1023,0,0, 0,0,0, 0,0,0, 0,0,0, /*Frame 2*/ 0,0,0, 0,0,0, 0,0,0, 1023,0,0, 0,0,0, 0,0,0, /*Frame 3*/ 0,0,0, 0,0,0, 0,0,0, 0,0,0, 1023,0,0, 0,0,0, /*Frame 4*/ 0,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0, 1023,0,0, /*Frame 5*/ 0,0,0, 0,0,0, 0,0,0, 0,0,0, 1023,0,0, 0,0,0, /*Frame 6*/ 0,0,0, 0,0,0, 0,0,0, 1023,0,0, 0,0,0, 0,0,0, /*Frame 7*/ 0,0,0, 0,0,0, 1023,0,0, 0,0,0, 0,0,0, 0,0,0, /*Frame 8*/ 0,0,0, 1023,0,0, 0,0,0, 0,0,0, 0,0,0, 0,0,0 /*Frame 9*/ /*A simple 'cylon' scanner 'movie'*/ }; Serial PC(PTA2, PTA1);//So I can use Bluetooth/Serial as output to terminal and input DigitalOut myled(LED1); //Instanced of DigitalOut for control SB signals DigitalOut latch(PTC16);//010=latch DigitalOut enable(PTA13);//0= enabled DigitalOut reset(PTC12); //Instance of the SPI contoller for SB data SPI spi(PTD2,NC,PTD1);//PDT2 = MOSI=DATA. PDT1=CLK int main() { //Instanciate a ticker object to handle framerate updates for the SB display Ticker t; //Instanciate a string of 5 sb modules and tell the driver object where the control/data pins are shiftBriteDisplay sbDisplay(&PC,latch, enable, reset, spi,6); //Example calls to method f() of shiftBriteDisplay class //sbDisplay.setLed(0,0X550000); //sbDisplay.setLed(4,0XFF,0X00,0X55); //in this case, 6 of these statements wold be required to build one frame //HOW TO BUILD A FRAME IF YOU ARE NOT USING THE MOVIE CLASS sbDisplay.setLed(0,0XFF0000);//Red sbDisplay.setLed(1,0X00FF00);//Green sbDisplay.setLed(2,0X0000FF);//Blue sbDisplay.setLed(3,0XFFFF00);//Yellow sbDisplay.setLed(4,0X00FFFF); //Cyan? sbDisplay.setLed(5,0XFF00FF); // Purple //HOW TO ADJUST THE CURRENT CONTROLLERS USED FOR DOT CORRECTION sbDisplay.setCurrentCorr(0,0,0);//suggested default value cor current control regs. Values g&b=100, r=120 sbDisplay.displayFrame();//force an update wait(2); sbDisplay.setCurrentCorr(127,127,127);//This should be MAX wait(2); //sbDisplay.setCurrentCorr(0x78,0x64,0x64);//sb suggested default sbDisplay.setCurrentCorr(0,0,0);//Dim wait(2); PC.printf("INVERTED\r\n"); sbDisplay.invert(); sbDisplay.displayFrame(); wait(2); PC.printf("FLIP\r\n"); sbDisplay.flip(); sbDisplay.displayFrame(); wait(2); sbDisplay.setLed(0,0XFF0000);//Red sbDisplay.setLed(1,0X000500);//Green sbDisplay.setLed(2,0X000005);//Blue sbDisplay.setLed(3,0X050500);//Yellow sbDisplay.setLed(4,0X000505); //Cyan? sbDisplay.setLed(5,0X050005); // Purple sbDisplay.displayFrame(); //get it on the LEDS PC.printf("RotateL"); unsigned int loop; for (loop=0; loop != 100; loop++){ sbDisplay.rotateLeft(); sbDisplay.displayFrame(); wait(0.1); } PC.printf("RotateR"); //unsigned int loop; for (loop=0; loop != 100; loop++){ sbDisplay.rotateRight(); sbDisplay.displayFrame(); wait(0.1); } for(loop=0; loop !=6; loop++){ sbDisplay.shiftRight(); sbDisplay.displayFrame(); wait(0.2); } PC.printf("Hallo (size=%d)\r\n", sizeof(unsigned long int)); sbDisplay.setLed(0,0X0F0000);//Red sbDisplay.setLed(1,0X000F00);//Green sbDisplay.setLed(2,0X00000F);//Blue sbDisplay.setLed(3,0X0F0F00);//Yellow sbDisplay.setLed(4,0X000F0F); //Cyan? sbDisplay.setLed(5,0X0F000F); // Purple sbDisplay.displayFrame(); //get it on the LEDS wait(0.5); sbDisplay.setCurrentCorr(0,0,0);//Dim sbDisplay.displayFrame(); //get it on the LEDS //Alternative to calling displayFrame() yourself, setup the framerate and update the display //t.attach_us(&sbDisplay,&shiftBriteDisplay::displayFrame,41666);//call updateFrame 24 times per second (every 41666uS) //t.attach(&sbDisplay,&shiftBriteDisplay::displayFrame,0.5);// or only every 0.5s for testing //USING THE MOVIE CLASS //Note, it uses the previously declared sbDisplay object. // movie myMovie(aMovie,sbDisplay,sizeof(aMovie)); // myMovie.setRepeat(1); // t.attach(&myMovie,&movie::play,0.05);//Beware, if you go too fast here the MBED will crash while(1){ } }