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
- Committer:
- DaniusKalv
- Date:
- 2015-10-03
- Revision:
- 22:8a5ea75ad53b
- Parent:
- 21:db8dadfd7d2a
File content as of revision 22:8a5ea75ad53b:
#include "matrix.h" #include "numbers.h" matrix::matrix(PinName _in1, PinName _in2, PinName _in3, PinName _clr, PinName _clr1, PinName _clk, PinName _clk1): local("local"), in1(_in1), in2(_in2), in3(_in3), clr(_clr), clr1(_clr1), clk(_clk), clk1(_clk1), pc(USBTX, USBRX){ }; void matrix::show(){ uint8_t temp; fp = fopen("/local/out.txt", "r"); fscanf(fp, "%i", &length); pc.printf("\r\nLength = %i", length); for (int i = 0; i < 16; i++){ fscanf(fp, "%x", &temp); //pc.printf("\r\n%02x", temp); for (int j = 0; j < 8; j++){ display[7 - j][i] = ((temp & (1 << (7 - j))) >> j); } } for (int i = 15; i < length; i++){ for (int j = 0; j < 8; j++){ multiplex(); } for (int g = 0; g < 15; g++){ for (int h = 0; h < 8; h++){ display[h][g] = display[h][g + 1]; } } fscanf(fp, "%x", &temp); //pc.printf("\r\n%02x", temp); for (int j = 0; j < 8; j++){ display[j][15] = ((temp & (1 << j)) >> j); } } fclose(fp); } void matrix::clear(){ in1 = 1; in2 = 0; in3 = 0; clk = 0; clk1 = 0; clr = 0; clr1 = 0; clr = 1; clr1 = 1; } void matrix::multiplex(){ int a[8] = {0, 1, 1, 1, 1, 1, 1, 1}; clear(); for (int i = 0; i < 8; i++){ clear(); for (int g = 0; g < 8; g++){ in1 = a[g]; //pc.printf("%i", a[g]); clk = 1; //wait(del); clk = 0; //wait(del); } //pc.printf("\r\n"); for (int j = 7; j > (-1); j--){ in3 = display[i][j]; in2 = display[i][j + 8]; //pc.printf("%i", show[i][j]); clk1 = 1; //wait(del); clk1 = 0; //wait(del); } wait(0.001); //pc.printf("\r\n"); a[i] = 1; a[i + 1] = 0; } } void matrix::clock(char *buffer, bool dot){ //pc.printf("\r\nClock %s", buffer); memset(display, 0, sizeof(display)); int digit = int(buffer[0]) - 48; //pc.printf("\r\nDigit= %i", digit); for (int i = 0; i < 3; i++){ for (int j = 0; j < 8; j++){ display[j][i] = ((number[i][digit] & (1 << (7 - j))) >> (7 - j)); }; }; digit = int(buffer[1]) - 48; //pc.printf("\r\nDigit= %i", digit); for (int i = 4; i < 7; i++){ for (int j = 0; j < 8; j++){ display[j][i] = ((number[i - 4][digit] & (1 << (7 - j))) >> (7 - j)); }; }; digit = int(buffer[2]) - 48; //pc.printf("\r\nDigit= %i", digit); for (int i = 9; i < 12; i++){ for (int j = 0; j < 8; j++){ display[j][i] = ((number[i - 9][digit] & (1 << (7 - j))) >> (7 - j)); }; }; digit = int(buffer[3]) - 48; //pc.printf("\r\nDigit= %i", digit); for (int i = 13; i < 16; i++){ for (int j = 0; j < 8; j++){ display[j][i] = ((number[i - 13][digit] & (1 << (7 - j))) >> (7 - j)); }; }; if (dot) display[6][7] = 1; //see(); for (int i = 0; i < 10; i++) multiplex(); //while (!pc.getc()); }; void matrix::see(){ pc.printf("\r\n"); for (int i = 0; i < 8; i++){ for (int j = 0; j < 16 ; j++){ pc.printf("%i ", display[i][j]); } pc.printf("\r\n"); } pc.printf("\r\n"); }