Projecte final de Sistemes Encastats
Dependencies: Hc05 RawSerialPc mbed-rtos mbed
main.cpp@2:1ac2d1debc92, 2015-12-16 (annotated)
- 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?
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 | 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 | } |