![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Projecte final de Sistemes Encastats
Dependencies: Hc05 RawSerialPc mbed-rtos mbed
main.cpp@1:c603de57c8b6, 2015-12-16 (annotated)
- 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?
User | Revision | Line number | New 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 | } |