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
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 }
Generated on Wed Jul 13 2022 22:58:20 by 1.7.2