Serial communication between a F303RE and a mobile phone using a HC-05 BT.

Dependencies:   mbed-rtos mbed

Committer:
jcabello7
Date:
Wed Dec 09 12:58:00 2015 +0000
Revision:
0:95b1edb8d258
Initial version (not working)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jcabello7 0:95b1edb8d258 1 #include "mbed.h"
jcabello7 0:95b1edb8d258 2 #include "rtos.h"
jcabello7 0:95b1edb8d258 3
jcabello7 0:95b1edb8d258 4 class Hc05 : public Serial
jcabello7 0:95b1edb8d258 5 {
jcabello7 0:95b1edb8d258 6
jcabello7 0:95b1edb8d258 7 public:
jcabello7 0:95b1edb8d258 8 Timer timer;
jcabello7 0:95b1edb8d258 9 Hc05(PinName tx, PinName rx) : Serial(tx, rx) {
jcabello7 0:95b1edb8d258 10 baud(115200);
jcabello7 0:95b1edb8d258 11 timer.start();
jcabello7 0:95b1edb8d258 12 //printf("Constructora");
jcabello7 0:95b1edb8d258 13 }
jcabello7 0:95b1edb8d258 14 ~Hc05() {
jcabello7 0:95b1edb8d258 15 timer.stop();
jcabello7 0:95b1edb8d258 16 //printf("Destructora");
jcabello7 0:95b1edb8d258 17 }
jcabello7 0:95b1edb8d258 18 bool enviaString(char* str) {
jcabello7 0:95b1edb8d258 19 if (str[0] != '\0')
jcabello7 0:95b1edb8d258 20 printf("%s", str);
jcabello7 0:95b1edb8d258 21 return true;
jcabello7 0:95b1edb8d258 22 }
jcabello7 0:95b1edb8d258 23
jcabello7 0:95b1edb8d258 24 void enviaStringAT(char* str) {
jcabello7 0:95b1edb8d258 25 //baud(38400);
jcabello7 0:95b1edb8d258 26 if (str[0] != '\0')
jcabello7 0:95b1edb8d258 27 printf("%s\r\n", str);
jcabello7 0:95b1edb8d258 28 }
jcabello7 0:95b1edb8d258 29 bool llegirStringAT(char* str) {
jcabello7 0:95b1edb8d258 30 if(readable()) {
jcabello7 0:95b1edb8d258 31 int i=0;
jcabello7 0:95b1edb8d258 32 str[i] = getc();
jcabello7 0:95b1edb8d258 33 //Quan detecta un 10 o un 13 surt del bucle (en el mode AT, envia 13+10)
jcabello7 0:95b1edb8d258 34 while(str[i] != 10 && (i < 128)) {
jcabello7 0:95b1edb8d258 35 i++;
jcabello7 0:95b1edb8d258 36 str[i] = getc();
jcabello7 0:95b1edb8d258 37 }
jcabello7 0:95b1edb8d258 38 str[i]='\0';
jcabello7 0:95b1edb8d258 39 return true;
jcabello7 0:95b1edb8d258 40 } else {
jcabello7 0:95b1edb8d258 41 str[0] = '\0';
jcabello7 0:95b1edb8d258 42 return false;
jcabello7 0:95b1edb8d258 43 }
jcabello7 0:95b1edb8d258 44 }
jcabello7 0:95b1edb8d258 45
jcabello7 0:95b1edb8d258 46 bool llegirString(char* str) {
jcabello7 0:95b1edb8d258 47 if(readable()) {
jcabello7 0:95b1edb8d258 48 timer.reset();
jcabello7 0:95b1edb8d258 49 int i=0;
jcabello7 0:95b1edb8d258 50 str[i] = getc();
jcabello7 0:95b1edb8d258 51 if (str[i] == '@')
jcabello7 0:95b1edb8d258 52 return false;
jcabello7 0:95b1edb8d258 53 //Quan detecta un 10 o un 13 surt del bucle (en el mode AT, envia 13+10)
jcabello7 0:95b1edb8d258 54 while(str[i] != 13 && (i < 128)) {
jcabello7 0:95b1edb8d258 55 i++;
jcabello7 0:95b1edb8d258 56 str[i] = getc();
jcabello7 0:95b1edb8d258 57 }
jcabello7 0:95b1edb8d258 58 str[i]='\0';
jcabello7 0:95b1edb8d258 59 return true;
jcabello7 0:95b1edb8d258 60 } else {
jcabello7 0:95b1edb8d258 61 str[0] = '\0';
jcabello7 0:95b1edb8d258 62 return false;
jcabello7 0:95b1edb8d258 63 }
jcabello7 0:95b1edb8d258 64 }
jcabello7 0:95b1edb8d258 65
jcabello7 0:95b1edb8d258 66 void modeAT(bool _bool) {
jcabello7 0:95b1edb8d258 67 if (_bool) {
jcabello7 0:95b1edb8d258 68 baud(38400);
jcabello7 0:95b1edb8d258 69 } else {
jcabello7 0:95b1edb8d258 70 baud(115200);
jcabello7 0:95b1edb8d258 71 }
jcabello7 0:95b1edb8d258 72 }
jcabello7 0:95b1edb8d258 73
jcabello7 0:95b1edb8d258 74 bool connexioOK() {
jcabello7 0:95b1edb8d258 75 if(timer.read_ms() > 500)
jcabello7 0:95b1edb8d258 76 return false;
jcabello7 0:95b1edb8d258 77 else
jcabello7 0:95b1edb8d258 78 return true;
jcabello7 0:95b1edb8d258 79 }
jcabello7 0:95b1edb8d258 80
jcabello7 0:95b1edb8d258 81 void checkConn() {
jcabello7 0:95b1edb8d258 82 if(readable())
jcabello7 0:95b1edb8d258 83 timer.reset();
jcabello7 0:95b1edb8d258 84 }
jcabello7 0:95b1edb8d258 85 };
jcabello7 0:95b1edb8d258 86
jcabello7 0:95b1edb8d258 87 class Pc : public Serial
jcabello7 0:95b1edb8d258 88 {
jcabello7 0:95b1edb8d258 89 public:
jcabello7 0:95b1edb8d258 90 Pc(PinName tx, PinName rx) : Serial(tx, rx) {
jcabello7 0:95b1edb8d258 91 baud(115200);
jcabello7 0:95b1edb8d258 92 printf("Constructora\n");
jcabello7 0:95b1edb8d258 93 }
jcabello7 0:95b1edb8d258 94 ~Pc() {
jcabello7 0:95b1edb8d258 95 printf("Destructora\n");
jcabello7 0:95b1edb8d258 96 }
jcabello7 0:95b1edb8d258 97 bool enviaString(char* str) {
jcabello7 0:95b1edb8d258 98 if (str[0] != '\0')
jcabello7 0:95b1edb8d258 99 printf("%s\n", str);
jcabello7 0:95b1edb8d258 100 return true;
jcabello7 0:95b1edb8d258 101 }
jcabello7 0:95b1edb8d258 102
jcabello7 0:95b1edb8d258 103 bool llegirString(char* str) {
jcabello7 0:95b1edb8d258 104 if(readable()) {
jcabello7 0:95b1edb8d258 105 int i=0;
jcabello7 0:95b1edb8d258 106 str[i] = getc();
jcabello7 0:95b1edb8d258 107 while(str[i] != 13 && (i < 128)) {
jcabello7 0:95b1edb8d258 108 i++;
jcabello7 0:95b1edb8d258 109 str[i] = getc();
jcabello7 0:95b1edb8d258 110 }
jcabello7 0:95b1edb8d258 111 str[i]='\0';
jcabello7 0:95b1edb8d258 112 return true;
jcabello7 0:95b1edb8d258 113 } else {
jcabello7 0:95b1edb8d258 114 str[0] = '\0';
jcabello7 0:95b1edb8d258 115 return false;
jcabello7 0:95b1edb8d258 116 }
jcabello7 0:95b1edb8d258 117 }
jcabello7 0:95b1edb8d258 118 };
jcabello7 0:95b1edb8d258 119
jcabello7 0:95b1edb8d258 120
jcabello7 0:95b1edb8d258 121
jcabello7 0:95b1edb8d258 122
jcabello7 0:95b1edb8d258 123
jcabello7 0:95b1edb8d258 124 void llegir_thread(void const *args);
jcabello7 0:95b1edb8d258 125
jcabello7 0:95b1edb8d258 126 Mutex mutex;
jcabello7 0:95b1edb8d258 127
jcabello7 0:95b1edb8d258 128 Pc pc(USBTX, USBRX);
jcabello7 0:95b1edb8d258 129 Hc05 bt(D8, D2);
jcabello7 0:95b1edb8d258 130
jcabello7 0:95b1edb8d258 131
jcabello7 0:95b1edb8d258 132
jcabello7 0:95b1edb8d258 133 int main()
jcabello7 0:95b1edb8d258 134 {
jcabello7 0:95b1edb8d258 135
jcabello7 0:95b1edb8d258 136
jcabello7 0:95b1edb8d258 137 //Thread thread(llegir_thread);
jcabello7 0:95b1edb8d258 138 char str[128];
jcabello7 0:95b1edb8d258 139
jcabello7 0:95b1edb8d258 140 while(1) {
jcabello7 0:95b1edb8d258 141 //Thread::signal_wait(0x1);
jcabello7 0:95b1edb8d258 142 if(pc.llegirString(str))
jcabello7 0:95b1edb8d258 143 bt.enviaString(str);
jcabello7 0:95b1edb8d258 144 if(bt.llegirString(str))
jcabello7 0:95b1edb8d258 145 pc.enviaString(str);
jcabello7 0:95b1edb8d258 146
jcabello7 0:95b1edb8d258 147 if(!(bt.connexioOK()))
jcabello7 0:95b1edb8d258 148 pc.printf("ERROR DE CONNEXIO\n");
jcabello7 0:95b1edb8d258 149 Thread::wait(500);
jcabello7 0:95b1edb8d258 150 //Thread::signal_set(0x2);
jcabello7 0:95b1edb8d258 151 }
jcabello7 0:95b1edb8d258 152
jcabello7 0:95b1edb8d258 153 }
jcabello7 0:95b1edb8d258 154
jcabello7 0:95b1edb8d258 155 void llegir_thread(void const *args) {
jcabello7 0:95b1edb8d258 156 while(1){
jcabello7 0:95b1edb8d258 157 //Thread::signal_wait(0x2);
jcabello7 0:95b1edb8d258 158 mutex.lock();
jcabello7 0:95b1edb8d258 159 bt.checkConn();
jcabello7 0:95b1edb8d258 160 mutex.unlock();
jcabello7 0:95b1edb8d258 161 Thread::wait(300);
jcabello7 0:95b1edb8d258 162
jcabello7 0:95b1edb8d258 163 //Thread::signal_set(0x1);
jcabello7 0:95b1edb8d258 164 }
jcabello7 0:95b1edb8d258 165 }