LED CUBE TEAM / Mbed 2 deprecated MAtrix

Dependencies:   mbed

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