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:
Wed Nov 19 09:19:28 2014 +0000
Revision:
19:2b14139fb19f
Parent:
17:9889611a4ad1
Parent:
11:996c98ad9d73
Child:
21:db8dadfd7d2a
merged branches

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