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