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

Committer:
DaniusKalv
Date:
Sat Oct 03 17:11:30 2015 +0000
Revision:
22:8a5ea75ad53b
Parent:
21:db8dadfd7d2a
Hey Dimitar

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DaniusKalv 3:35a47548d29d 1 #include "matrix.h"
DaniusKalv 16:440f341e7de4 2 #include "numbers.h"
DaniusKalv 0:06ac39308380 3
DaniusKalv 3:35a47548d29d 4 matrix::matrix(PinName _in1, PinName _in2, PinName _in3, PinName _clr,
DaniusKalv 3:35a47548d29d 5 PinName _clr1, PinName _clk, PinName _clk1): local("local"), in1(_in1), in2(_in2),
DaniusKalv 3:35a47548d29d 6 in3(_in3), clr(_clr), clr1(_clr1), clk(_clk), clk1(_clk1), pc(USBTX, USBRX){
DaniusKalv 3:35a47548d29d 7 };
DaniusKalv 0:06ac39308380 8
DaniusKalv 3:35a47548d29d 9 void matrix::show(){
DaniusKalv 21:db8dadfd7d2a 10 uint8_t temp;
DaniusKalv 3:35a47548d29d 11 fp = fopen("/local/out.txt", "r");
DaniusKalv 3:35a47548d29d 12 fscanf(fp, "%i", &length);
DaniusKalv 21:db8dadfd7d2a 13 pc.printf("\r\nLength = %i", length);
DaniusKalv 3:35a47548d29d 14 for (int i = 0; i < 16; i++){
DaniusKalv 21:db8dadfd7d2a 15 fscanf(fp, "%x", &temp);
DaniusKalv 21:db8dadfd7d2a 16 //pc.printf("\r\n%02x", temp);
DaniusKalv 3:35a47548d29d 17 for (int j = 0; j < 8; j++){
DaniusKalv 21:db8dadfd7d2a 18 display[7 - j][i] = ((temp & (1 << (7 - j))) >> j);
DaniusKalv 0:06ac39308380 19 }
DaniusKalv 0:06ac39308380 20 }
DaniusKalv 3:35a47548d29d 21 for (int i = 15; i < length; i++){
DaniusKalv 3:35a47548d29d 22 for (int j = 0; j < 8; j++){
DaniusKalv 3:35a47548d29d 23 multiplex();
DaniusKalv 3:35a47548d29d 24 }
DaniusKalv 3:35a47548d29d 25 for (int g = 0; g < 15; g++){
DaniusKalv 3:35a47548d29d 26 for (int h = 0; h < 8; h++){
DaniusKalv 3:35a47548d29d 27 display[h][g] = display[h][g + 1];
DaniusKalv 0:06ac39308380 28 }
DaniusKalv 0:06ac39308380 29 }
DaniusKalv 21:db8dadfd7d2a 30 fscanf(fp, "%x", &temp);
DaniusKalv 21:db8dadfd7d2a 31 //pc.printf("\r\n%02x", temp);
DaniusKalv 3:35a47548d29d 32 for (int j = 0; j < 8; j++){
DaniusKalv 21:db8dadfd7d2a 33 display[j][15] = ((temp & (1 << j)) >> j);
DaniusKalv 0:06ac39308380 34 }
DaniusKalv 16:440f341e7de4 35 }
DaniusKalv 3:35a47548d29d 36 fclose(fp);
DaniusKalv 0:06ac39308380 37 }
DaniusKalv 0:06ac39308380 38
DaniusKalv 3:35a47548d29d 39 void matrix::clear(){
DaniusKalv 0:06ac39308380 40 in1 = 1;
DaniusKalv 0:06ac39308380 41 in2 = 0;
DaniusKalv 0:06ac39308380 42 in3 = 0;
DaniusKalv 0:06ac39308380 43 clk = 0;
DaniusKalv 0:06ac39308380 44 clk1 = 0;
DaniusKalv 0:06ac39308380 45 clr = 0;
DaniusKalv 0:06ac39308380 46 clr1 = 0;
DaniusKalv 0:06ac39308380 47 clr = 1;
DaniusKalv 0:06ac39308380 48 clr1 = 1;
DaniusKalv 0:06ac39308380 49 }
DaniusKalv 0:06ac39308380 50
DaniusKalv 3:35a47548d29d 51 void matrix::multiplex(){
DaniusKalv 3:35a47548d29d 52 int a[8] = {0, 1, 1, 1, 1, 1, 1, 1};
DaniusKalv 3:35a47548d29d 53 clear();
DaniusKalv 0:06ac39308380 54 for (int i = 0; i < 8; i++){
DaniusKalv 3:35a47548d29d 55 clear();
DaniusKalv 3:35a47548d29d 56 for (int g = 0; g < 8; g++){
DaniusKalv 3:35a47548d29d 57 in1 = a[g];
DaniusKalv 3:35a47548d29d 58 //pc.printf("%i", a[g]);
DaniusKalv 3:35a47548d29d 59 clk = 1;
DaniusKalv 3:35a47548d29d 60 //wait(del);
DaniusKalv 3:35a47548d29d 61 clk = 0;
DaniusKalv 3:35a47548d29d 62 //wait(del);
DaniusKalv 0:06ac39308380 63 }
DaniusKalv 3:35a47548d29d 64 //pc.printf("\r\n");
DaniusKalv 3:35a47548d29d 65 for (int j = 7; j > (-1); j--){
DaniusKalv 3:35a47548d29d 66 in3 = display[i][j];
DaniusKalv 3:35a47548d29d 67 in2 = display[i][j + 8];
DaniusKalv 3:35a47548d29d 68 //pc.printf("%i", show[i][j]);
DaniusKalv 3:35a47548d29d 69 clk1 = 1;
DaniusKalv 3:35a47548d29d 70 //wait(del);
DaniusKalv 3:35a47548d29d 71 clk1 = 0;
DaniusKalv 3:35a47548d29d 72 //wait(del);
DaniusKalv 3:35a47548d29d 73 }
DaniusKalv 3:35a47548d29d 74 wait(0.001);
DaniusKalv 3:35a47548d29d 75 //pc.printf("\r\n");
DaniusKalv 3:35a47548d29d 76 a[i] = 1;
DaniusKalv 3:35a47548d29d 77 a[i + 1] = 0;
DaniusKalv 3:35a47548d29d 78 }
DaniusKalv 3:35a47548d29d 79 }
DaniusKalv 3:35a47548d29d 80
DaniusKalv 10:ee58d712c7fb 81 void matrix::clock(char *buffer, bool dot){
DaniusKalv 17:9889611a4ad1 82 //pc.printf("\r\nClock %s", buffer);
DaniusKalv 16:440f341e7de4 83
DaniusKalv 16:440f341e7de4 84 memset(display, 0, sizeof(display));
DaniusKalv 16:440f341e7de4 85
DaniusKalv 16:440f341e7de4 86 int digit = int(buffer[0]) - 48;
DaniusKalv 17:9889611a4ad1 87 //pc.printf("\r\nDigit= %i", digit);
DaniusKalv 16:440f341e7de4 88
DaniusKalv 16:440f341e7de4 89 for (int i = 0; i < 3; i++){
DaniusKalv 16:440f341e7de4 90 for (int j = 0; j < 8; j++){
DaniusKalv 17:9889611a4ad1 91 display[j][i] = ((number[i][digit] & (1 << (7 - j))) >> (7 - j));
DaniusKalv 16:440f341e7de4 92 };
DaniusKalv 16:440f341e7de4 93 };
DaniusKalv 16:440f341e7de4 94
DaniusKalv 16:440f341e7de4 95 digit = int(buffer[1]) - 48;
DaniusKalv 17:9889611a4ad1 96 //pc.printf("\r\nDigit= %i", digit);
DaniusKalv 16:440f341e7de4 97
DaniusKalv 16:440f341e7de4 98 for (int i = 4; i < 7; i++){
DaniusKalv 16:440f341e7de4 99 for (int j = 0; j < 8; j++){
DaniusKalv 17:9889611a4ad1 100 display[j][i] = ((number[i - 4][digit] & (1 << (7 - j))) >> (7 - j));
DaniusKalv 16:440f341e7de4 101 };
DaniusKalv 16:440f341e7de4 102 };
DaniusKalv 16:440f341e7de4 103
DaniusKalv 16:440f341e7de4 104 digit = int(buffer[2]) - 48;
DaniusKalv 17:9889611a4ad1 105 //pc.printf("\r\nDigit= %i", digit);
DaniusKalv 16:440f341e7de4 106
DaniusKalv 16:440f341e7de4 107 for (int i = 9; i < 12; i++){
DaniusKalv 16:440f341e7de4 108 for (int j = 0; j < 8; j++){
DaniusKalv 17:9889611a4ad1 109 display[j][i] = ((number[i - 9][digit] & (1 << (7 - j))) >> (7 - j));
DaniusKalv 16:440f341e7de4 110 };
DaniusKalv 16:440f341e7de4 111 };
DaniusKalv 16:440f341e7de4 112
DaniusKalv 16:440f341e7de4 113 digit = int(buffer[3]) - 48;
DaniusKalv 17:9889611a4ad1 114 //pc.printf("\r\nDigit= %i", digit);
DaniusKalv 16:440f341e7de4 115
DaniusKalv 16:440f341e7de4 116 for (int i = 13; i < 16; i++){
DaniusKalv 16:440f341e7de4 117 for (int j = 0; j < 8; j++){
DaniusKalv 17:9889611a4ad1 118 display[j][i] = ((number[i - 13][digit] & (1 << (7 - j))) >> (7 - j));
DaniusKalv 16:440f341e7de4 119 };
DaniusKalv 16:440f341e7de4 120 };
DaniusKalv 16:440f341e7de4 121
DaniusKalv 17:9889611a4ad1 122 if (dot) display[6][7] = 1;
DaniusKalv 17:9889611a4ad1 123 //see();
DaniusKalv 17:9889611a4ad1 124 for (int i = 0; i < 10; i++) multiplex();
DaniusKalv 17:9889611a4ad1 125 //while (!pc.getc());
DaniusKalv 10:ee58d712c7fb 126 };
DaniusKalv 10:ee58d712c7fb 127
DaniusKalv 17:9889611a4ad1 128 void matrix::see(){
DaniusKalv 17:9889611a4ad1 129 pc.printf("\r\n");
DaniusKalv 17:9889611a4ad1 130 for (int i = 0; i < 8; i++){
DaniusKalv 17:9889611a4ad1 131 for (int j = 0; j < 16 ; j++){
DaniusKalv 17:9889611a4ad1 132 pc.printf("%i ", display[i][j]);
DaniusKalv 17:9889611a4ad1 133 }
DaniusKalv 17:9889611a4ad1 134 pc.printf("\r\n");
DaniusKalv 17:9889611a4ad1 135 }
DaniusKalv 17:9889611a4ad1 136 pc.printf("\r\n");
DaniusKalv 19:2b14139fb19f 137 }