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
main.cpp@14:adbb11e53c70, 2014-11-04 (annotated)
- Committer:
- DaniusKalv
- Date:
- Tue Nov 04 01:48:07 2014 +0000
- Revision:
- 14:adbb11e53c70
- Parent:
- 13:96590015edd8
- Child:
- 15:ba91aa788443
Shit
Who changed what in which revision?
User | Revision | Line number | New 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 | 14:adbb11e53c70 | 85 | Thread::wait(5); |
DaniusKalv | 6:76b89d8b62a0 | 86 | } |
DaniusKalv | 0:06ac39308380 | 87 | } |