Jose Gutierrez Cabello
/
projecte_v3_rtos
Serial communication between a F303RE and a mobile phone using a HC-05 BT.
main.cpp
- Committer:
- jcabello7
- Date:
- 2015-12-09
- Revision:
- 0:95b1edb8d258
File content as of revision 0:95b1edb8d258:
#include "mbed.h" #include "rtos.h" class Hc05 : public Serial { public: Timer timer; Hc05(PinName tx, PinName rx) : Serial(tx, rx) { baud(115200); timer.start(); //printf("Constructora"); } ~Hc05() { timer.stop(); //printf("Destructora"); } bool enviaString(char* str) { if (str[0] != '\0') printf("%s", str); return true; } void enviaStringAT(char* str) { //baud(38400); if (str[0] != '\0') printf("%s\r\n", str); } bool llegirStringAT(char* str) { if(readable()) { int i=0; str[i] = getc(); //Quan detecta un 10 o un 13 surt del bucle (en el mode AT, envia 13+10) while(str[i] != 10 && (i < 128)) { i++; str[i] = getc(); } str[i]='\0'; return true; } else { str[0] = '\0'; return false; } } bool llegirString(char* str) { if(readable()) { timer.reset(); int i=0; str[i] = getc(); if (str[i] == '@') return false; //Quan detecta un 10 o un 13 surt del bucle (en el mode AT, envia 13+10) while(str[i] != 13 && (i < 128)) { i++; str[i] = getc(); } str[i]='\0'; return true; } else { str[0] = '\0'; return false; } } void modeAT(bool _bool) { if (_bool) { baud(38400); } else { baud(115200); } } bool connexioOK() { if(timer.read_ms() > 500) return false; else return true; } void checkConn() { if(readable()) timer.reset(); } }; class Pc : public Serial { public: Pc(PinName tx, PinName rx) : Serial(tx, rx) { baud(115200); printf("Constructora\n"); } ~Pc() { printf("Destructora\n"); } bool enviaString(char* str) { if (str[0] != '\0') printf("%s\n", str); return true; } bool llegirString(char* str) { if(readable()) { int i=0; str[i] = getc(); while(str[i] != 13 && (i < 128)) { i++; str[i] = getc(); } str[i]='\0'; return true; } else { str[0] = '\0'; return false; } } }; void llegir_thread(void const *args); Mutex mutex; Pc pc(USBTX, USBRX); Hc05 bt(D8, D2); int main() { //Thread thread(llegir_thread); char str[128]; while(1) { //Thread::signal_wait(0x1); if(pc.llegirString(str)) bt.enviaString(str); if(bt.llegirString(str)) pc.enviaString(str); if(!(bt.connexioOK())) pc.printf("ERROR DE CONNEXIO\n"); Thread::wait(500); //Thread::signal_set(0x2); } } void llegir_thread(void const *args) { while(1){ //Thread::signal_wait(0x2); mutex.lock(); bt.checkConn(); mutex.unlock(); Thread::wait(300); //Thread::signal_set(0x1); } }