radarGSE

Dependencies:   HCSR04 mbed buzzer

Committer:
Mickado
Date:
Wed Dec 02 15:58:43 2015 +0000
Revision:
2:7f70360301da
Parent:
1:653adffd6de7
test

Who changed what in which revision?

UserRevisionLine numberNew 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 }