Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Diff: main.cpp
- Revision:
- 13:96590015edd8
- Parent:
- 12:a8364a98c38c
- Child:
- 14:adbb11e53c70
--- a/main.cpp Mon Nov 03 09:40:51 2014 +0000 +++ b/main.cpp Tue Nov 04 01:41:06 2014 +0000 @@ -1,77 +1,87 @@ #include "mbed.h" #include "matrix.h" #include "text.h" -#include <string> +#include "string.h" +#include "rtos.h" text generator; matrix display(p13, p12, p11, p14, p15, p17, p16); DigitalOut led(LED1); Serial pc(USBTX, USBRX); Serial bluetooth(p28,p27); -static char line[99], line_buffer[99]; -static bool mode_buffer = 0; -static uint8_t interrupt_flag = 0; -int realTime; -void receive(); -int test; +static char line_buffer[99]; +static bool mode_buffer = false; +static bool buffer_flag = false; +void bluetoothThread(void const *args); +Mutex buffer_mutex; -int main() { - static bool m_mode; +int main() +{ + bool matrix_mode = false; + char line[99]; char buffer[4]; bool dot; pc.baud(115200); - bluetooth.baud(38400); - void (*foo)() = &receive; - bluetooth.attach(foo, Serial::RxIrq); generator.generate("ABCD"); - while(true){ - /*if (interrupt_flag == 1){ - m_mode = mode_buffer; + Thread thread(bluetoothThread); + + while(true) { + + if(buffer_flag) { + buffer_mutex.lock(); + matrix_mode = mode_buffer; memcpy(line, line_buffer, sizeof(line_buffer)); - interrupt_flag = 0; - }*/ - pc.printf("\r\nMode = %i", m_mode); - if (strlen(line) > 0 && m_mode == 0){ - led = 0; - generator.generate(line); - memset(line, 0, sizeof(line)); + led = 0; + buffer_flag = false; + buffer_mutex.unlock(); + + if (matrix_mode == 0) generator.generate(line); } - else if (strlen(line) > 0 && m_mode == 1){ - led = 0; - memset(line, 0, sizeof(line)); - } - if(m_mode == 1){ + + pc.printf("\r\nMode = %i", matrix_mode); + + if (matrix_mode == 1){ time_t seconds = time(NULL); - strftime(buffer, 4, "%H%M", localtime(&seconds)); + strftime(buffer, 4, "%H%M", localtime(&seconds)); if ((seconds % 2) == 0) dot = true; - else dot = false; + else dot = false; display.clock(buffer, dot); } else display.show(); } } -void receive(){ - led = 1; - int i, j = 0; - i = 10 * (bluetooth.getc() - 48); - i += bluetooth.getc() - 48; - if(i > 0){ - mode_buffer = false; - do{ - line_buffer[j] = bluetooth.getc(); - j++; - wait(0.0004); +void bluetoothThread(void const *args) +{ + bluetooth.baud(38400); + + while(true) { + + if (bluetooth.readable()) { + int i, j = 0; + i = 10 * (bluetooth.getc() - 48); + i += bluetooth.getc() - 48; + + buffer_mutex.lock(); + memset(line_buffer, 0, sizeof(line_buffer)); + if(i > 0) { + mode_buffer = false; + do { + line_buffer[j] = bluetooth.getc(); + j++; + Thread::wait(0.4); + } + while(bluetooth.readable() && (j < i) && (j < 99)); + } + else { + mode_buffer = true; + bluetooth.gets(line_buffer, 10); + set_time(atoi(line_buffer)); + } + led = 1; + buffer_flag = true; + buffer_mutex.unlock(); } - while(bluetooth.readable() && (j < i) && (j < 99)); + Thread::wait(10); } - else{ - pc.printf("\r\nClock mode"); - mode_buffer = true; - bluetooth.gets(line, 10); - realTime = atoi(line_buffer); - set_time(realTime); - pc.printf("\r\nTime : %i Mode : %i", realTime, mode_buffer); - } - interrupt_flag = 1; } \ No newline at end of file