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:
Tue Nov 04 01:41:06 2014 +0000
Revision:
13:96590015edd8
Parent:
12:a8364a98c38c
Child:
14:adbb11e53c70
Clock doesn't work, something wrong with mode, text works fine

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DaniusKalv 0:06ac39308380 1 #include "mbed.h"
DaniusKalv 0:06ac39308380 2 #include "matrix.h"
DaniusKalv 2:3cc1e2dec7a2 3 #include "text.h"
DaniusKalv 13:96590015edd8 4 #include "string.h"
DaniusKalv 13:96590015edd8 5 #include "rtos.h"
DaniusKalv 2:3cc1e2dec7a2 6
DaniusKalv 2:3cc1e2dec7a2 7 text generator;
DaniusKalv 3:35a47548d29d 8 matrix display(p13, p12, p11, p14, p15, p17, p16);
DaniusKalv 6:76b89d8b62a0 9 DigitalOut led(LED1);
DaniusKalv 5:76dd6da3e640 10 Serial pc(USBTX, USBRX);
DaniusKalv 5:76dd6da3e640 11 Serial bluetooth(p28,p27);
DaniusKalv 13:96590015edd8 12 static char line_buffer[99];
DaniusKalv 13:96590015edd8 13 static bool mode_buffer = false;
DaniusKalv 13:96590015edd8 14 static bool buffer_flag = false;
DaniusKalv 13:96590015edd8 15 void bluetoothThread(void const *args);
DaniusKalv 13:96590015edd8 16 Mutex buffer_mutex;
DaniusKalv 0:06ac39308380 17
DaniusKalv 13:96590015edd8 18 int main()
DaniusKalv 13:96590015edd8 19 {
DaniusKalv 13:96590015edd8 20 bool matrix_mode = false;
DaniusKalv 13:96590015edd8 21 char line[99];
DaniusKalv 10:ee58d712c7fb 22 char buffer[4];
DaniusKalv 10:ee58d712c7fb 23 bool dot;
DaniusKalv 6:76b89d8b62a0 24 pc.baud(115200);
DaniusKalv 10:ee58d712c7fb 25 generator.generate("ABCD");
DaniusKalv 13:96590015edd8 26 Thread thread(bluetoothThread);
DaniusKalv 13:96590015edd8 27
DaniusKalv 13:96590015edd8 28 while(true) {
DaniusKalv 13:96590015edd8 29
DaniusKalv 13:96590015edd8 30 if(buffer_flag) {
DaniusKalv 13:96590015edd8 31 buffer_mutex.lock();
DaniusKalv 13:96590015edd8 32 matrix_mode = mode_buffer;
DaniusKalv 10:ee58d712c7fb 33 memcpy(line, line_buffer, sizeof(line_buffer));
DaniusKalv 13:96590015edd8 34 led = 0;
DaniusKalv 13:96590015edd8 35 buffer_flag = false;
DaniusKalv 13:96590015edd8 36 buffer_mutex.unlock();
DaniusKalv 13:96590015edd8 37
DaniusKalv 13:96590015edd8 38 if (matrix_mode == 0) generator.generate(line);
DaniusKalv 5:76dd6da3e640 39 }
DaniusKalv 13:96590015edd8 40
DaniusKalv 13:96590015edd8 41 pc.printf("\r\nMode = %i", matrix_mode);
DaniusKalv 13:96590015edd8 42
DaniusKalv 13:96590015edd8 43 if (matrix_mode == 1){
DaniusKalv 10:ee58d712c7fb 44 time_t seconds = time(NULL);
DaniusKalv 13:96590015edd8 45 strftime(buffer, 4, "%H%M", localtime(&seconds));
DaniusKalv 10:ee58d712c7fb 46 if ((seconds % 2) == 0) dot = true;
DaniusKalv 13:96590015edd8 47 else dot = false;
DaniusKalv 10:ee58d712c7fb 48 display.clock(buffer, dot);
DaniusKalv 10:ee58d712c7fb 49 }
DaniusKalv 10:ee58d712c7fb 50 else display.show();
DaniusKalv 5:76dd6da3e640 51 }
DaniusKalv 6:76b89d8b62a0 52 }
DaniusKalv 6:76b89d8b62a0 53
DaniusKalv 13:96590015edd8 54 void bluetoothThread(void const *args)
DaniusKalv 13:96590015edd8 55 {
DaniusKalv 13:96590015edd8 56 bluetooth.baud(38400);
DaniusKalv 13:96590015edd8 57
DaniusKalv 13:96590015edd8 58 while(true) {
DaniusKalv 13:96590015edd8 59
DaniusKalv 13:96590015edd8 60 if (bluetooth.readable()) {
DaniusKalv 13:96590015edd8 61 int i, j = 0;
DaniusKalv 13:96590015edd8 62 i = 10 * (bluetooth.getc() - 48);
DaniusKalv 13:96590015edd8 63 i += bluetooth.getc() - 48;
DaniusKalv 13:96590015edd8 64
DaniusKalv 13:96590015edd8 65 buffer_mutex.lock();
DaniusKalv 13:96590015edd8 66 memset(line_buffer, 0, sizeof(line_buffer));
DaniusKalv 13:96590015edd8 67 if(i > 0) {
DaniusKalv 13:96590015edd8 68 mode_buffer = false;
DaniusKalv 13:96590015edd8 69 do {
DaniusKalv 13:96590015edd8 70 line_buffer[j] = bluetooth.getc();
DaniusKalv 13:96590015edd8 71 j++;
DaniusKalv 13:96590015edd8 72 Thread::wait(0.4);
DaniusKalv 13:96590015edd8 73 }
DaniusKalv 13:96590015edd8 74 while(bluetooth.readable() && (j < i) && (j < 99));
DaniusKalv 13:96590015edd8 75 }
DaniusKalv 13:96590015edd8 76 else {
DaniusKalv 13:96590015edd8 77 mode_buffer = true;
DaniusKalv 13:96590015edd8 78 bluetooth.gets(line_buffer, 10);
DaniusKalv 13:96590015edd8 79 set_time(atoi(line_buffer));
DaniusKalv 13:96590015edd8 80 }
DaniusKalv 13:96590015edd8 81 led = 1;
DaniusKalv 13:96590015edd8 82 buffer_flag = true;
DaniusKalv 13:96590015edd8 83 buffer_mutex.unlock();
DaniusKalv 10:ee58d712c7fb 84 }
DaniusKalv 13:96590015edd8 85 Thread::wait(10);
DaniusKalv 6:76b89d8b62a0 86 }
DaniusKalv 0:06ac39308380 87 }