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