Blue LED matrix (8x16) program. Gets text string through bluetooth and displays it on led matrix. Also has a clock function- get system time from a phone through bluetooth and enters clock mode. In clock mode it acts as a clock showing hours and minutes and blinking led every second. Clock mode can be broken if a text string is received through bluetooth.

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers matrix.cpp Source File

matrix.cpp

00001 #include "matrix.h"
00002 #include "numbers.h"
00003 
00004 matrix::matrix(PinName _in1, PinName _in2, PinName _in3, PinName _clr, 
00005 PinName _clr1, PinName _clk, PinName _clk1): local("local"), in1(_in1), in2(_in2), 
00006 in3(_in3), clr(_clr), clr1(_clr1), clk(_clk), clk1(_clk1), pc(USBTX, USBRX){
00007 };
00008 
00009 void matrix::show(){
00010     uint8_t temp;
00011     fp = fopen("/local/out.txt", "r");
00012     fscanf(fp, "%i", &length);
00013     pc.printf("\r\nLength = %i", length);
00014     for (int i = 0; i < 16; i++){
00015         fscanf(fp, "%x", &temp);
00016         //pc.printf("\r\n%02x", temp);
00017         for (int j = 0; j < 8; j++){
00018             display[7 - j][i] = ((temp & (1 << (7 - j))) >> j);    
00019         }
00020     }
00021     for (int i = 15; i < length; i++){
00022         for (int j = 0; j < 8; j++){
00023             multiplex();
00024         }
00025         for (int g = 0; g < 15; g++){
00026             for (int h = 0; h < 8; h++){
00027                 display[h][g] = display[h][g + 1];
00028             }
00029         }
00030         fscanf(fp, "%x", &temp);
00031         //pc.printf("\r\n%02x", temp);
00032         for (int j = 0; j < 8; j++){
00033             display[j][15] = ((temp & (1 << j)) >> j);
00034         }
00035     }    
00036     fclose(fp);
00037 }
00038 
00039 void matrix::clear(){
00040     in1 = 1;
00041     in2 = 0;
00042     in3 = 0;
00043     clk = 0;
00044     clk1 = 0;
00045     clr = 0;
00046     clr1 = 0;
00047     clr = 1;
00048     clr1 = 1;
00049 }
00050 
00051 void matrix::multiplex(){
00052     int a[8] = {0, 1, 1, 1, 1, 1, 1, 1};
00053     clear();
00054     for (int i = 0; i < 8; i++){
00055         clear();
00056         for (int g = 0; g < 8; g++){
00057             in1 = a[g];
00058             //pc.printf("%i", a[g]);
00059             clk = 1;
00060             //wait(del);
00061             clk = 0;
00062             //wait(del);    
00063         }
00064         //pc.printf("\r\n");
00065         for (int j = 7; j > (-1); j--){
00066             in3 = display[i][j];
00067             in2 = display[i][j + 8];
00068             //pc.printf("%i", show[i][j]);
00069             clk1 = 1;
00070             //wait(del);
00071             clk1 = 0;
00072             //wait(del);      
00073         }
00074         wait(0.001);
00075         //pc.printf("\r\n");
00076         a[i] = 1;
00077         a[i + 1] = 0;
00078     }    
00079 }
00080 
00081 void matrix::clock(char *buffer, bool dot){
00082     //pc.printf("\r\nClock %s", buffer);
00083     
00084     memset(display, 0, sizeof(display));
00085     
00086     int digit = int(buffer[0]) - 48;
00087     //pc.printf("\r\nDigit= %i", digit);
00088     
00089     for (int i = 0; i < 3; i++){
00090         for (int j = 0; j < 8; j++){
00091             display[j][i] = ((number[i][digit] & (1 << (7 - j))) >> (7 - j));
00092         };       
00093     };  
00094     
00095     digit = int(buffer[1]) - 48;
00096     //pc.printf("\r\nDigit= %i", digit);
00097     
00098     for (int i = 4; i < 7; i++){
00099         for (int j = 0; j < 8; j++){
00100             display[j][i] = ((number[i - 4][digit] & (1 << (7 - j))) >> (7 - j));
00101         };       
00102     }; 
00103     
00104     digit = int(buffer[2]) - 48;
00105     //pc.printf("\r\nDigit= %i", digit);
00106     
00107     for (int i = 9; i < 12; i++){
00108         for (int j = 0; j < 8; j++){
00109             display[j][i] = ((number[i - 9][digit] & (1 << (7 - j))) >> (7 - j));
00110         };       
00111     }; 
00112     
00113     digit = int(buffer[3]) - 48;
00114     //pc.printf("\r\nDigit= %i", digit);
00115     
00116     for (int i = 13; i < 16; i++){
00117         for (int j = 0; j < 8; j++){
00118             display[j][i] = ((number[i - 13][digit] & (1 << (7 - j))) >> (7 - j));
00119         };       
00120     }; 
00121     
00122     if (dot) display[6][7] = 1;
00123     //see();
00124     for (int i = 0; i < 10; i++) multiplex();
00125     //while (!pc.getc());
00126 };
00127 
00128 void matrix::see(){
00129     pc.printf("\r\n");
00130     for (int i = 0; i < 8; i++){
00131         for (int j = 0; j < 16 ; j++){
00132             pc.printf("%i ", display[i][j]);
00133         }
00134         pc.printf("\r\n");
00135     }
00136     pc.printf("\r\n");
00137 }