radarGSE
Dependencies: HCSR04 mbed buzzer
main.cpp@0:d93aff6b153f, 2015-11-25 (annotated)
- Committer:
- Mickado
- Date:
- Wed Nov 25 14:08:15 2015 +0000
- Revision:
- 0:d93aff6b153f
- Child:
- 1:653adffd6de7
radar
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Mickado | 0:d93aff6b153f | 1 | #include "mbed.h" |
Mickado | 0:d93aff6b153f | 2 | #include <string.h> |
Mickado | 0:d93aff6b153f | 3 | #include "HCSR04.h" |
Mickado | 0:d93aff6b153f | 4 | //#include "rtos.h" |
Mickado | 0:d93aff6b153f | 5 | |
Mickado | 0:d93aff6b153f | 6 | #define TRIG_1 PA_8 |
Mickado | 0:d93aff6b153f | 7 | #define ECHO_1 PC_7 |
Mickado | 0:d93aff6b153f | 8 | |
Mickado | 0:d93aff6b153f | 9 | Serial pc(USBTX, USBRX); //reception --- tx, rx |
Mickado | 0:d93aff6b153f | 10 | Serial carte(PA_9, PA_10); //emission --- tx, rx |
Mickado | 0:d93aff6b153f | 11 | |
Mickado | 0:d93aff6b153f | 12 | HCSR04 sensor1(TRIG_1, ECHO_1); |
Mickado | 0:d93aff6b153f | 13 | DigitalOut led1(LED1); |
Mickado | 0:d93aff6b153f | 14 | |
Mickado | 0:d93aff6b153f | 15 | int max (int a, int b) { |
Mickado | 0:d93aff6b153f | 16 | return (a<b)?b:a; |
Mickado | 0:d93aff6b153f | 17 | } |
Mickado | 0:d93aff6b153f | 18 | |
Mickado | 0:d93aff6b153f | 19 | int min (int a, int b) { |
Mickado | 0:d93aff6b153f | 20 | return (a<b)?a:b; |
Mickado | 0:d93aff6b153f | 21 | } |
Mickado | 0:d93aff6b153f | 22 | |
Mickado | 0:d93aff6b153f | 23 | void USART1_puts(char *text){ |
Mickado | 0:d93aff6b153f | 24 | while(*text != '\0'){ |
Mickado | 0:d93aff6b153f | 25 | |
Mickado | 0:d93aff6b153f | 26 | if(carte.writeable()){ |
Mickado | 0:d93aff6b153f | 27 | carte.putc(*text); |
Mickado | 0:d93aff6b153f | 28 | text++; |
Mickado | 0:d93aff6b153f | 29 | } |
Mickado | 0:d93aff6b153f | 30 | |
Mickado | 0:d93aff6b153f | 31 | } |
Mickado | 0:d93aff6b153f | 32 | } |
Mickado | 0:d93aff6b153f | 33 | |
Mickado | 0:d93aff6b153f | 34 | |
Mickado | 0:d93aff6b153f | 35 | void format(char *msg, char *msg_formated){ |
Mickado | 0:d93aff6b153f | 36 | int somme=5; |
Mickado | 0:d93aff6b153f | 37 | int i=0; |
Mickado | 0:d93aff6b153f | 38 | msg_formated[0]=2; |
Mickado | 0:d93aff6b153f | 39 | printf("\n\r"); |
Mickado | 0:d93aff6b153f | 40 | while(msg[i]!=0){ |
Mickado | 0:d93aff6b153f | 41 | somme= somme + msg[i]; |
Mickado | 0:d93aff6b153f | 42 | msg_formated[i+1]=msg[i]; |
Mickado | 0:d93aff6b153f | 43 | i++; |
Mickado | 0:d93aff6b153f | 44 | } |
Mickado | 0:d93aff6b153f | 45 | if(somme>255){ |
Mickado | 0:d93aff6b153f | 46 | somme++; |
Mickado | 0:d93aff6b153f | 47 | } |
Mickado | 0:d93aff6b153f | 48 | somme=somme%256; |
Mickado | 0:d93aff6b153f | 49 | msg_formated[i+1]=~somme; |
Mickado | 0:d93aff6b153f | 50 | msg_formated[i+2]=3; |
Mickado | 0:d93aff6b153f | 51 | msg_formated[i+3]=0; |
Mickado | 0:d93aff6b153f | 52 | |
Mickado | 0:d93aff6b153f | 53 | //A supprimer |
Mickado | 0:d93aff6b153f | 54 | i=0; |
Mickado | 0:d93aff6b153f | 55 | while(msg_formated[i]!=0){ |
Mickado | 0:d93aff6b153f | 56 | printf("[%d] ", msg_formated[i]); |
Mickado | 0:d93aff6b153f | 57 | i++; |
Mickado | 0:d93aff6b153f | 58 | } |
Mickado | 0:d93aff6b153f | 59 | } |
Mickado | 0:d93aff6b153f | 60 | |
Mickado | 0:d93aff6b153f | 61 | /* |
Mickado | 0:d93aff6b153f | 62 | void format(char *msg, char *msg_formated){ |
Mickado | 0:d93aff6b153f | 63 | char *STX = 2; |
Mickado | 0:d93aff6b153f | 64 | char *ETX = 3; |
Mickado | 0:d93aff6b153f | 65 | strcat(msg_formated, STX); |
Mickado | 0:d93aff6b153f | 66 | strcat(msg_formated, msg); |
Mickado | 0:d93aff6b153f | 67 | strcat(msg_formated, ETX); |
Mickado | 0:d93aff6b153f | 68 | } |
Mickado | 0:d93aff6b153f | 69 | */ |
Mickado | 0:d93aff6b153f | 70 | |
Mickado | 0:d93aff6b153f | 71 | void send(char *data){ |
Mickado | 0:d93aff6b153f | 72 | char trame[52]=""; |
Mickado | 0:d93aff6b153f | 73 | format(data, trame); |
Mickado | 0:d93aff6b153f | 74 | USART1_puts(trame); |
Mickado | 0:d93aff6b153f | 75 | } |
Mickado | 0:d93aff6b153f | 76 | |
Mickado | 0:d93aff6b153f | 77 | /* |
Mickado | 0:d93aff6b153f | 78 | void receive(char *frame){ |
Mickado | 0:d93aff6b153f | 79 | char trame[50]={0}; |
Mickado | 0:d93aff6b153f | 80 | int etat = 0; |
Mickado | 0:d93aff6b153f | 81 | while(etat != 2){ |
Mickado | 0:d93aff6b153f | 82 | char r; |
Mickado | 0:d93aff6b153f | 83 | if(carte.readable()){ |
Mickado | 0:d93aff6b153f | 84 | r = carte.getc(); |
Mickado | 0:d93aff6b153f | 85 | switch(etat){ |
Mickado | 0:d93aff6b153f | 86 | case 0 : if(r == 'S'){etat = 1;} |
Mickado | 0:d93aff6b153f | 87 | break; |
Mickado | 0:d93aff6b153f | 88 | case 1 : if(r != 'E'){strcat(trame,&r);} |
Mickado | 0:d93aff6b153f | 89 | else { etat = 2; } |
Mickado | 0:d93aff6b153f | 90 | break; |
Mickado | 0:d93aff6b153f | 91 | default : break; |
Mickado | 0:d93aff6b153f | 92 | } |
Mickado | 0:d93aff6b153f | 93 | } |
Mickado | 0:d93aff6b153f | 94 | } |
Mickado | 0:d93aff6b153f | 95 | for(int i=0;i<50;i++){ |
Mickado | 0:d93aff6b153f | 96 | frame[i]=trame[i]; |
Mickado | 0:d93aff6b153f | 97 | } |
Mickado | 0:d93aff6b153f | 98 | } |
Mickado | 0:d93aff6b153f | 99 | */ |
Mickado | 0:d93aff6b153f | 100 | |
Mickado | 0:d93aff6b153f | 101 | int receive(char *frame){ |
Mickado | 0:d93aff6b153f | 102 | int end = 0; |
Mickado | 0:d93aff6b153f | 103 | int I; |
Mickado | 0:d93aff6b153f | 104 | unsigned int sommeBuffer; |
Mickado | 0:d93aff6b153f | 105 | char r; |
Mickado | 0:d93aff6b153f | 106 | Timer timeout; |
Mickado | 0:d93aff6b153f | 107 | timeout.start(); |
Mickado | 0:d93aff6b153f | 108 | while(1){ |
Mickado | 0:d93aff6b153f | 109 | if(timeout.read_ms() > 100) return 1; |
Mickado | 0:d93aff6b153f | 110 | if(carte.readable()){ |
Mickado | 0:d93aff6b153f | 111 | r = carte.getc(); |
Mickado | 0:d93aff6b153f | 112 | |
Mickado | 0:d93aff6b153f | 113 | switch(r){ |
Mickado | 0:d93aff6b153f | 114 | case 2: //Start |
Mickado | 0:d93aff6b153f | 115 | I=0; |
Mickado | 0:d93aff6b153f | 116 | sommeBuffer=2; |
Mickado | 0:d93aff6b153f | 117 | break; |
Mickado | 0:d93aff6b153f | 118 | |
Mickado | 0:d93aff6b153f | 119 | case 3: //Stop |
Mickado | 0:d93aff6b153f | 120 | frame[I]=0; |
Mickado | 0:d93aff6b153f | 121 | sommeBuffer+=3; |
Mickado | 0:d93aff6b153f | 122 | |
Mickado | 0:d93aff6b153f | 123 | if(sommeBuffer>255){ |
Mickado | 0:d93aff6b153f | 124 | sommeBuffer++; |
Mickado | 0:d93aff6b153f | 125 | } |
Mickado | 0:d93aff6b153f | 126 | sommeBuffer=~sommeBuffer; |
Mickado | 0:d93aff6b153f | 127 | sommeBuffer=sommeBuffer%256; |
Mickado | 0:d93aff6b153f | 128 | |
Mickado | 0:d93aff6b153f | 129 | if(sommeBuffer==0){ //Les sommes concordent, les données sont valides |
Mickado | 0:d93aff6b153f | 130 | frame[I-1]=0; |
Mickado | 0:d93aff6b153f | 131 | return 0; |
Mickado | 0:d93aff6b153f | 132 | }else{ //Message invalidé par la somme |
Mickado | 0:d93aff6b153f | 133 | frame[0]=0; |
Mickado | 0:d93aff6b153f | 134 | return 1; |
Mickado | 0:d93aff6b153f | 135 | } |
Mickado | 0:d93aff6b153f | 136 | break; |
Mickado | 0:d93aff6b153f | 137 | |
Mickado | 0:d93aff6b153f | 138 | default : |
Mickado | 0:d93aff6b153f | 139 | frame[I]=r; |
Mickado | 0:d93aff6b153f | 140 | sommeBuffer+=r; |
Mickado | 0:d93aff6b153f | 141 | I++; |
Mickado | 0:d93aff6b153f | 142 | break; |
Mickado | 0:d93aff6b153f | 143 | } |
Mickado | 0:d93aff6b153f | 144 | } |
Mickado | 0:d93aff6b153f | 145 | } |
Mickado | 0:d93aff6b153f | 146 | return 1; |
Mickado | 0:d93aff6b153f | 147 | } |
Mickado | 0:d93aff6b153f | 148 | |
Mickado | 0:d93aff6b153f | 149 | int controle(char *frame){ |
Mickado | 0:d93aff6b153f | 150 | if (*frame!=6) |
Mickado | 0:d93aff6b153f | 151 | return 0; |
Mickado | 0:d93aff6b153f | 152 | return 1; |
Mickado | 0:d93aff6b153f | 153 | |
Mickado | 0:d93aff6b153f | 154 | } |
Mickado | 0:d93aff6b153f | 155 | |
Mickado | 0:d93aff6b153f | 156 | void tictac(){ |
Mickado | 0:d93aff6b153f | 157 | led1 = !led1; |
Mickado | 0:d93aff6b153f | 158 | } |
Mickado | 0:d93aff6b153f | 159 | void bipContinu(){ |
Mickado | 0:d93aff6b153f | 160 | led1 = 1; |
Mickado | 0:d93aff6b153f | 161 | } |
Mickado | 0:d93aff6b153f | 162 | void bipOff(){ |
Mickado | 0:d93aff6b153f | 163 | led1 = 0; |
Mickado | 0:d93aff6b153f | 164 | } |
Mickado | 0:d93aff6b153f | 165 | |
Mickado | 0:d93aff6b153f | 166 | //Emission d'une trame, reception d'acquittement et vérification |
Mickado | 0:d93aff6b153f | 167 | int main() { |
Mickado | 0:d93aff6b153f | 168 | Ticker tic; |
Mickado | 0:d93aff6b153f | 169 | tic.attach(&bipOff, 0.1); |
Mickado | 0:d93aff6b153f | 170 | |
Mickado | 0:d93aff6b153f | 171 | char trame[50]; |
Mickado | 0:d93aff6b153f | 172 | int essai, error; |
Mickado | 0:d93aff6b153f | 173 | int i=0; |
Mickado | 0:d93aff6b153f | 174 | int value; |
Mickado | 0:d93aff6b153f | 175 | //int value[10] = {255, 200, 150, 100, 50, 40, 30, 20, 10, 5}; |
Mickado | 0:d93aff6b153f | 176 | char message[4]; |
Mickado | 0:d93aff6b153f | 177 | |
Mickado | 0:d93aff6b153f | 178 | int mem[2] = {-1, -1}; |
Mickado | 0:d93aff6b153f | 179 | int memFreq = 0; |
Mickado | 0:d93aff6b153f | 180 | Timer timeout; |
Mickado | 0:d93aff6b153f | 181 | |
Mickado | 0:d93aff6b153f | 182 | while(1){ |
Mickado | 0:d93aff6b153f | 183 | |
Mickado | 0:d93aff6b153f | 184 | value=min(sensor1.distance(1),230); |
Mickado | 0:d93aff6b153f | 185 | value=max(value,0); |
Mickado | 0:d93aff6b153f | 186 | |
Mickado | 0:d93aff6b153f | 187 | if(mem[0]<0){ |
Mickado | 0:d93aff6b153f | 188 | mem[0]=value; |
Mickado | 0:d93aff6b153f | 189 | }else{ |
Mickado | 0:d93aff6b153f | 190 | if(abs(mem[0]-value)<40){ |
Mickado | 0:d93aff6b153f | 191 | mem[1]=mem[0]; |
Mickado | 0:d93aff6b153f | 192 | mem[0]=value; |
Mickado | 0:d93aff6b153f | 193 | }else{ |
Mickado | 0:d93aff6b153f | 194 | value=mem[0]; |
Mickado | 0:d93aff6b153f | 195 | } |
Mickado | 0:d93aff6b153f | 196 | } |
Mickado | 0:d93aff6b153f | 197 | |
Mickado | 0:d93aff6b153f | 198 | |
Mickado | 0:d93aff6b153f | 199 | int freq; |
Mickado | 0:d93aff6b153f | 200 | |
Mickado | 0:d93aff6b153f | 201 | if(value<=17){ //0 |
Mickado | 0:d93aff6b153f | 202 | freq=0; |
Mickado | 0:d93aff6b153f | 203 | }else if(value>17 && value<=30){ //1 |
Mickado | 0:d93aff6b153f | 204 | freq=1; |
Mickado | 0:d93aff6b153f | 205 | }else if(value>30 && value<=70){ //2 |
Mickado | 0:d93aff6b153f | 206 | freq=2; |
Mickado | 0:d93aff6b153f | 207 | }else if(value>70 && value<=130){ //3 |
Mickado | 0:d93aff6b153f | 208 | freq=3; |
Mickado | 0:d93aff6b153f | 209 | }else if(value>130 && value<=200){ //4 |
Mickado | 0:d93aff6b153f | 210 | freq=4; |
Mickado | 0:d93aff6b153f | 211 | }else{ //5 |
Mickado | 0:d93aff6b153f | 212 | freq=5; |
Mickado | 0:d93aff6b153f | 213 | } |
Mickado | 0:d93aff6b153f | 214 | |
Mickado | 0:d93aff6b153f | 215 | if(memFreq != freq){ |
Mickado | 0:d93aff6b153f | 216 | memFreq = freq; |
Mickado | 0:d93aff6b153f | 217 | tic.detach(); |
Mickado | 0:d93aff6b153f | 218 | |
Mickado | 0:d93aff6b153f | 219 | if(value<=17){ //0 |
Mickado | 0:d93aff6b153f | 220 | tic.attach(&bipContinu, 1); |
Mickado | 0:d93aff6b153f | 221 | }else if(value>17 && value<=30){ //1 |
Mickado | 0:d93aff6b153f | 222 | tic.attach(&tictac, 0.05); |
Mickado | 0:d93aff6b153f | 223 | }else if(value>30 && value<=70){ //2 |
Mickado | 0:d93aff6b153f | 224 | tic.attach(&tictac, 0.1); |
Mickado | 0:d93aff6b153f | 225 | }else if(value>70 && value<=130){ //3 |
Mickado | 0:d93aff6b153f | 226 | tic.attach(&tictac, 0.2); |
Mickado | 0:d93aff6b153f | 227 | }else if(value>130 && value<=200){ //4 |
Mickado | 0:d93aff6b153f | 228 | tic.attach(&tictac, 0.3); |
Mickado | 0:d93aff6b153f | 229 | }else{ //5 |
Mickado | 0:d93aff6b153f | 230 | led1=0; |
Mickado | 0:d93aff6b153f | 231 | } |
Mickado | 0:d93aff6b153f | 232 | |
Mickado | 0:d93aff6b153f | 233 | } |
Mickado | 0:d93aff6b153f | 234 | |
Mickado | 0:d93aff6b153f | 235 | message[0]=48+(value/100)%10; |
Mickado | 0:d93aff6b153f | 236 | message[1]=48+(value/10)%10; |
Mickado | 0:d93aff6b153f | 237 | message[2]=48+value%10; |
Mickado | 0:d93aff6b153f | 238 | message[3]=0; |
Mickado | 0:d93aff6b153f | 239 | |
Mickado | 0:d93aff6b153f | 240 | essai=0; |
Mickado | 0:d93aff6b153f | 241 | printf("%s\n\r",message); |
Mickado | 0:d93aff6b153f | 242 | send(message); |
Mickado | 0:d93aff6b153f | 243 | |
Mickado | 0:d93aff6b153f | 244 | error=receive(trame); |
Mickado | 0:d93aff6b153f | 245 | |
Mickado | 0:d93aff6b153f | 246 | |
Mickado | 0:d93aff6b153f | 247 | while((controle(trame)==0 || error==1) && essai<3){ |
Mickado | 0:d93aff6b153f | 248 | send(message); |
Mickado | 0:d93aff6b153f | 249 | error=receive(trame); |
Mickado | 0:d93aff6b153f | 250 | essai++; |
Mickado | 0:d93aff6b153f | 251 | } |
Mickado | 0:d93aff6b153f | 252 | |
Mickado | 0:d93aff6b153f | 253 | if(essai==3) return 0; |
Mickado | 0:d93aff6b153f | 254 | |
Mickado | 0:d93aff6b153f | 255 | i=(i+1)%10; |
Mickado | 0:d93aff6b153f | 256 | wait(1); |
Mickado | 0:d93aff6b153f | 257 | |
Mickado | 0:d93aff6b153f | 258 | } |
Mickado | 0:d93aff6b153f | 259 | } |