Projecte final de Sistemes Encastats

Dependencies:   Hc05 RawSerialPc mbed-rtos mbed

Committer:
jcabello7
Date:
Wed Dec 16 16:06:25 2015 +0000
Revision:
1:c603de57c8b6
Parent:
0:be638f6ee353
Child:
2:1ac2d1debc92
Versi? que admet angles negatius, nomes falta afegir la part de comprovaci? de connexi?

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jcabello7 0:be638f6ee353 1 #include "mbed.h"
jcabello7 0:be638f6ee353 2 #include "rtos.h"
jcabello7 0:be638f6ee353 3 #include <string>
jcabello7 1:c603de57c8b6 4 // -----------------------------
jcabello7 1:c603de57c8b6 5 // ---- NO TOCAR DESDE AQUI ----
jcabello7 1:c603de57c8b6 6 // -----------------------------
jcabello7 0:be638f6ee353 7
jcabello7 1:c603de57c8b6 8 #define longString 128 //longString es la longitud màxima del string
jcabello7 0:be638f6ee353 9
jcabello7 0:be638f6ee353 10 class Pc : public RawSerial {
jcabello7 0:be638f6ee353 11 public:
jcabello7 0:be638f6ee353 12 Pc(PinName tx, PinName rx) : RawSerial(tx, rx){
jcabello7 0:be638f6ee353 13 baud(115200);
jcabello7 0:be638f6ee353 14 };
jcabello7 0:be638f6ee353 15
jcabello7 0:be638f6ee353 16 void enviaString(char* str){
jcabello7 0:be638f6ee353 17 int i = 0;
jcabello7 0:be638f6ee353 18 while((i < longString) && (str[i] != '\0')) {
jcabello7 0:be638f6ee353 19 putc(str[i]);
jcabello7 0:be638f6ee353 20 i++;
jcabello7 0:be638f6ee353 21 }
jcabello7 0:be638f6ee353 22 putc(10);
jcabello7 0:be638f6ee353 23 };
jcabello7 0:be638f6ee353 24
jcabello7 0:be638f6ee353 25 bool llegirString(char* str){
jcabello7 0:be638f6ee353 26 if(readable()){
jcabello7 0:be638f6ee353 27 int i= 0;
jcabello7 0:be638f6ee353 28 str[i] = getc();
jcabello7 0:be638f6ee353 29 while((i < longString) && (str[i] != 13)) {
jcabello7 0:be638f6ee353 30 if (str[i] != '@')
jcabello7 0:be638f6ee353 31 i++;
jcabello7 0:be638f6ee353 32 str[i] = getc();
jcabello7 0:be638f6ee353 33 }
jcabello7 0:be638f6ee353 34 str[i] = '\0';
jcabello7 0:be638f6ee353 35 return true;
jcabello7 0:be638f6ee353 36 }
jcabello7 0:be638f6ee353 37 return false;
jcabello7 0:be638f6ee353 38 };
jcabello7 0:be638f6ee353 39
jcabello7 0:be638f6ee353 40
jcabello7 0:be638f6ee353 41 };
jcabello7 0:be638f6ee353 42
jcabello7 0:be638f6ee353 43 class Hc05 : public RawSerial {
jcabello7 1:c603de57c8b6 44 private:
jcabello7 1:c603de57c8b6 45 int mode, vel, ang;
jcabello7 1:c603de57c8b6 46 char strLlegit[longString];
jcabello7 0:be638f6ee353 47 public:
jcabello7 0:be638f6ee353 48 //Mutex mutex;
jcabello7 0:be638f6ee353 49 Hc05(PinName tx, PinName rx) : RawSerial(tx, rx){
jcabello7 0:be638f6ee353 50 baud(115200);
jcabello7 1:c603de57c8b6 51 mode = vel = ang = 0;
jcabello7 1:c603de57c8b6 52 iniString();
jcabello7 0:be638f6ee353 53 };
jcabello7 0:be638f6ee353 54
jcabello7 1:c603de57c8b6 55 void iniString(){
jcabello7 1:c603de57c8b6 56 strLlegit[0] = 'S';
jcabello7 1:c603de57c8b6 57 strLlegit[1] = 't';
jcabello7 1:c603de57c8b6 58 strLlegit[2] = 'r';
jcabello7 1:c603de57c8b6 59 strLlegit[3] = 'i';
jcabello7 1:c603de57c8b6 60 strLlegit[4] = 'n';
jcabello7 1:c603de57c8b6 61 strLlegit[5] = 'g';
jcabello7 1:c603de57c8b6 62 strLlegit[6] = '\0';
jcabello7 1:c603de57c8b6 63 };
jcabello7 1:c603de57c8b6 64
jcabello7 0:be638f6ee353 65 void enviaString(char* str){
jcabello7 0:be638f6ee353 66 int i = 0;
jcabello7 0:be638f6ee353 67 while((i < longString) && (str[i] != '\0')) {
jcabello7 0:be638f6ee353 68 putc(str[i]);
jcabello7 0:be638f6ee353 69 i++;
jcabello7 0:be638f6ee353 70 }
jcabello7 0:be638f6ee353 71 putc(13);
jcabello7 0:be638f6ee353 72 };
jcabello7 0:be638f6ee353 73
jcabello7 0:be638f6ee353 74
jcabello7 1:c603de57c8b6 75 bool llegirString(){
jcabello7 0:be638f6ee353 76 if(readable()){
jcabello7 0:be638f6ee353 77 char c = getc();
jcabello7 0:be638f6ee353 78 int i = 0;
jcabello7 0:be638f6ee353 79 //mutex.lock();
jcabello7 0:be638f6ee353 80 while((i < longString) && (c != 13)) {
jcabello7 0:be638f6ee353 81 if(c!='@'){
jcabello7 1:c603de57c8b6 82 strLlegit[i] = c;
jcabello7 0:be638f6ee353 83 i++;
jcabello7 0:be638f6ee353 84 }
jcabello7 0:be638f6ee353 85 c = getc();
jcabello7 0:be638f6ee353 86 }
jcabello7 1:c603de57c8b6 87 strLlegit[i] = '\0';
jcabello7 0:be638f6ee353 88 //mutex.unlock();
jcabello7 0:be638f6ee353 89 return true;
jcabello7 0:be638f6ee353 90
jcabello7 0:be638f6ee353 91 }
jcabello7 0:be638f6ee353 92 return false;
jcabello7 0:be638f6ee353 93 };
jcabello7 0:be638f6ee353 94
jcabello7 1:c603de57c8b6 95 void tractaString(){
jcabello7 1:c603de57c8b6 96 if ((strLlegit[0] == 'a') && (strLlegit[1] == 'v') && (strLlegit[2] == 'a') && (strLlegit[3] == 'n'))
jcabello7 0:be638f6ee353 97 mode = 1;
jcabello7 1:c603de57c8b6 98 if ((strLlegit[0] == 'r') && (strLlegit[1] == 'o') && (strLlegit[2] == 't') && (strLlegit[3] == 'a'))
jcabello7 0:be638f6ee353 99 mode = 2;
jcabello7 1:c603de57c8b6 100 if ((strLlegit[0] == 's') && (strLlegit[1] == 't') && (strLlegit[2] == 'o') && (strLlegit[3] == 'p')){
jcabello7 0:be638f6ee353 101 mode = 0;
jcabello7 1:c603de57c8b6 102 vel = 0;
jcabello7 1:c603de57c8b6 103 ang = 0;
jcabello7 1:c603de57c8b6 104 }
jcabello7 0:be638f6ee353 105 if ((mode == 1) || (mode==2)){
jcabello7 1:c603de57c8b6 106 char svel[5], sang[5];
jcabello7 1:c603de57c8b6 107 for(int i = 0; i<=4;i++){
jcabello7 1:c603de57c8b6 108 sang[i] = strLlegit[i+5];
jcabello7 1:c603de57c8b6 109 svel[i] = strLlegit[i+10];
jcabello7 0:be638f6ee353 110 }
jcabello7 1:c603de57c8b6 111 sang[4] = svel[4] = '\0';
jcabello7 0:be638f6ee353 112 vel = atoi(svel);
jcabello7 0:be638f6ee353 113 ang = atoi(sang);
jcabello7 0:be638f6ee353 114 }
jcabello7 0:be638f6ee353 115 };
jcabello7 1:c603de57c8b6 116
jcabello7 1:c603de57c8b6 117 int getMode(){return mode;};
jcabello7 1:c603de57c8b6 118 int getVel(){return vel;};
jcabello7 1:c603de57c8b6 119 int getAng(){return ang;};
jcabello7 1:c603de57c8b6 120 void getStringLlegit(char* str){
jcabello7 1:c603de57c8b6 121 int i = 0;
jcabello7 1:c603de57c8b6 122 while((i < longString) && (strLlegit[i] != '\0')) {
jcabello7 1:c603de57c8b6 123 str[i] = strLlegit[i];
jcabello7 1:c603de57c8b6 124 i++;
jcabello7 1:c603de57c8b6 125 }
jcabello7 1:c603de57c8b6 126 str[i] = '\0';
jcabello7 1:c603de57c8b6 127 };
jcabello7 0:be638f6ee353 128 };
jcabello7 1:c603de57c8b6 129 // ----------------------------
jcabello7 1:c603de57c8b6 130 // ---- NO TOCAR FINS AQUI ----
jcabello7 1:c603de57c8b6 131 // ----------------------------
jcabello7 0:be638f6ee353 132
jcabello7 1:c603de57c8b6 133 Pc pc(USBTX, USBRX); //Per provar si funciona, no cal al programa
jcabello7 1:c603de57c8b6 134 Hc05 bt(D8, D2); //Crea l'objecte bt, connectat als pins D8 i D2 (és la connexió sèrie BT)
jcabello7 1:c603de57c8b6 135 char prova[longString] = "hola"; //Per provar si funciona, no cal al programa
jcabello7 0:be638f6ee353 136
jcabello7 1:c603de57c8b6 137
jcabello7 1:c603de57c8b6 138 //Aquest serà el meu fil, que va llegint cada 300ms del HC-05
jcabello7 0:be638f6ee353 139 void llegir_thread(void const *args) {
jcabello7 0:be638f6ee353 140 while (true) {
jcabello7 1:c603de57c8b6 141 bt.llegirString();
jcabello7 1:c603de57c8b6 142 bt.getStringLlegit(prova); //Per provar si funciona, no cal al programa
jcabello7 1:c603de57c8b6 143 bt.tractaString();
jcabello7 0:be638f6ee353 144 Thread::wait(300);
jcabello7 0:be638f6ee353 145 }
jcabello7 0:be638f6ee353 146 }
jcabello7 1:c603de57c8b6 147
jcabello7 1:c603de57c8b6 148 //Aquest serà el programa principal
jcabello7 0:be638f6ee353 149 int main() {
jcabello7 1:c603de57c8b6 150
jcabello7 1:c603de57c8b6 151 Thread thread(llegir_thread); //Inicia el fil llegir_thread
jcabello7 0:be638f6ee353 152
jcabello7 0:be638f6ee353 153 while (true) {
jcabello7 1:c603de57c8b6 154 pc.enviaString(prova); //Per provar si funciona, no cal al programa
jcabello7 1:c603de57c8b6 155 if(bt.getAng()<0) //Per provar si funciona, no cal al programa
jcabello7 1:c603de57c8b6 156 pc.enviaString("ANGLE<0"); //Per provar si funciona, no cal al programa
jcabello7 1:c603de57c8b6 157 if(bt.getVel()== 60) //Per provar si funciona, no cal al programa
jcabello7 1:c603de57c8b6 158 pc.enviaString("VEL=60"); //Per provar si funciona, no cal al programa
jcabello7 1:c603de57c8b6 159 bt.getMode(); //Retorna 0 si ha llegit l'ordre parar, 1 per avançar, 2 per rotar, -1 si hi ha error de connexio
jcabello7 1:c603de57c8b6 160 bt.getVel(); //Retorna un enter amb la velocitat (de 0 a 100)
jcabello7 1:c603de57c8b6 161 bt.getAng(); //Retorna un enter amb l'angle (de -180º a 180º)
jcabello7 1:c603de57c8b6 162 Thread::wait(1000);
jcabello7 0:be638f6ee353 163 }
jcabello7 0:be638f6ee353 164 }