Projecte final de Sistemes Encastats

Dependencies:   Hc05 RawSerialPc mbed-rtos mbed

Revision:
0:be638f6ee353
Child:
1:c603de57c8b6
diff -r 000000000000 -r be638f6ee353 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Dec 16 14:48:28 2015 +0000
@@ -0,0 +1,125 @@
+#include "mbed.h"
+#include "rtos.h"
+#include <string>
+
+#define longString 128
+
+class Pc : public RawSerial {
+    public:
+        Pc(PinName tx, PinName rx) : RawSerial(tx, rx){
+            baud(115200);
+        };
+            
+        void enviaString(char* str){
+            int i = 0;
+            while((i < longString) && (str[i] != '\0')) {
+                putc(str[i]);
+                i++;
+            }
+            putc(10);
+        };
+        
+        bool llegirString(char* str){
+            if(readable()){
+                int i= 0;
+                str[i] = getc();
+                while((i < longString) && (str[i] != 13)) {                    
+                    if (str[i] != '@')
+                        i++;
+                    str[i] = getc();
+                }
+                str[i] = '\0';
+                return true;           
+            }
+            return false;
+        };
+        
+
+ };
+ 
+ class Hc05 : public RawSerial {
+    public:
+        //Mutex mutex;
+        Hc05(PinName tx, PinName rx) : RawSerial(tx, rx){
+            baud(115200);
+            };
+            
+        void enviaString(char* str){
+            int i = 0;
+            while((i < longString) && (str[i] != '\0')) {
+                putc(str[i]);
+                i++;
+            }
+            putc(13);
+        };
+        
+        
+        bool llegirString(char* str){
+            if(readable()){
+                char c = getc();
+                int i = 0;
+                //mutex.lock();
+                while((i < longString) && (c != 13)) {
+                    if(c!='@'){
+                        str[i] = c;
+                        i++;
+                    }
+                    c = getc();
+                }
+                str[i] = '\0';
+                //mutex.unlock();
+                return true;
+                
+            }
+            return false;
+        };
+        
+        void tractaString(char* str, int& mode, int& vel, int& ang){
+            if ((str[0] == 'a') && (str[1] == 'v') && (str[2] == 'a') && (str[3] == 'n'))
+                mode = 1;
+            if ((str[0] == 'r') && (str[1] == 'o') && (str[2] == 't') && (str[3] == 'a'))
+                mode = 2;
+            if ((str[0] == 's') && (str[1] == 't') && (str[2] == 'o') && (str[3] == 'p'))
+                mode = 0;
+            if ((mode == 1) || (mode==2)){
+                char svel[4], sang[4];
+                for(int i = 0; i<=3;i++){
+                    sang[i] = str[i+5];
+                    svel[i] = str[i+9];    
+                }
+                sang[3] = svel[3] = '\0';
+                vel = atoi(svel);
+                ang = atoi(sang);
+            }
+        };
+
+};
+
+Pc pc(USBTX, USBRX);
+Hc05 bt(D8, D2);
+char prova[longString] = "hola";
+char enviar[longString] = "enviar";
+int mode, vel, ang;
+
+ 
+void llegir_thread(void const *args) {
+    while (true) {
+        //pc.enviaString(prova);
+        bt.llegirString(prova);
+        bt.tractaString(prova, mode, vel, ang);
+        Thread::wait(300);
+    }
+}
+ 
+int main() {
+    mode = vel = ang = 0;
+    Thread thread(llegir_thread);
+    
+    while (true) {
+        pc.enviaString(prova);
+        if(vel==50)
+            pc.enviaString("VEL=50");
+        
+        Thread::wait(1000);
+    }
+}
\ No newline at end of file