Projecte final de Sistemes Encastats

Dependencies:   Hc05 RawSerialPc mbed-rtos mbed

Committer:
jcabello7
Date:
Wed Dec 16 18:09:25 2015 +0000
Revision:
2:1ac2d1debc92
Parent:
1:c603de57c8b6
Child:
3:4a598ab10e87
afegit mode automatic (mode=3)

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