Projecte final de Sistemes Encastats

Dependencies:   Hc05 RawSerialPc mbed-rtos mbed

main.cpp

Committer:
jcabello7
Date:
2015-12-16
Revision:
0:be638f6ee353
Child:
1:c603de57c8b6

File content as of revision 0:be638f6ee353:

#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);
    }
}