Message scroller
Dependencies: HT1632_LedMatrix mbed-rtos mbed
main.cpp
- Committer:
- SomeRandomBloke
- Date:
- 2012-11-28
- Revision:
- 0:5438c56c3e4c
- Child:
- 1:fecc093f43d4
File content as of revision 0:5438c56c3e4c:
// Simple scrolling message display for mbed and HT1632C based LED matrix displays #include "mbed.h" #include <HT1632_LedMatrix.h> Serial pc(USBTX, USBRX); // tx, rx // Define the onboard LEDs to use as status indicators DigitalOut led1(LED1); // Activity DigitalOut led2(LED2); // Activity, alternates with led2 // create object to control the LED Matrix HT1632_LedMatrix led = HT1632_LedMatrix(); #define DISPDELAY 90 // Define the message, add blanks to front so it doesnt lose first part immediately char* msg = " The quick brown fox jumped over the lazy dog!!!"; int crtPos = 0; int msgx = 1; // position on message screen of current character, set to 1 to allow for first scroll /* * This works for multiple 8x32 matrix. */ void displayScrollingLine( void const* ) { int y,xmax,ymax; led.getXYMax(&xmax,&ymax); while(true) { // shift the whole screen 6 times, one column at a time; for (int x=0; x < 6; x++) { led.scrollLeft(1,0); msgx--; // fit as much as we can on display while (!led.putChar(msgx,0,msg[crtPos])) { // zero return if it all fitted on display led.getXY(&msgx,&y); crtPos++; // we got all of the character on!! if (crtPos >= strlen(msg)) { crtPos = 0; } } led.putShadowRam(); Thread::wait(DISPDELAY); } } } int main() { // Define how many displays we have, older 0832 allowed vertical stacking // newer ones dont unless you want a gap between the displays. // Num horizontal displays 1 to 4, num vertical displays 1 to 4. Max 4 displays can be used. // Usable combinations are 1,1; 2,1; 3,1; 4,1; and 2,2; 1,2; 1,3; 1,4; with gaps!! led.init(1,1); pc.baud(9600); printf("LED Matrix dislay test"); led.clear(); led.setBrightness(8); Thread displayTask(displayScrollingLine, NULL, osPriorityNormal, 1024 * 4); // Show we are still working by alternatively flashing LED1 and LED2, once a second led1 = 0; // Working led2 = 1; // Alternate with led1 while(1) { led1=!led1; led2=!led2; Thread::wait(1000); } }