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@22:8a5ea75ad53b, 2015-10-03 (annotated)
- 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?
User | Revision | Line number | New 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 | } |