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