aa

Dependencies:   HCSR04 mbed

Fork of Nucleo_radar by Contest IOT GSE5

Committer:
Alex_Hochart
Date:
Wed Dec 02 12:43:30 2015 +0000
Revision:
1:8558d2451e3e
Parent:
0:d93aff6b153f
aaa

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 0:d93aff6b153f 4
Mickado 0:d93aff6b153f 5 #define TRIG_1 PA_8
Mickado 0:d93aff6b153f 6 #define ECHO_1 PC_7
Mickado 0:d93aff6b153f 7
Mickado 0:d93aff6b153f 8 Serial pc(USBTX, USBRX); //reception --- tx, rx
Mickado 0:d93aff6b153f 9 Serial carte(PA_9, PA_10); //emission --- tx, rx
Mickado 0:d93aff6b153f 10
Mickado 0:d93aff6b153f 11 HCSR04 sensor1(TRIG_1, ECHO_1);
Alex_Hochart 1:8558d2451e3e 12 DigitalOut buzz(PB_8);
Mickado 0:d93aff6b153f 13
Mickado 0:d93aff6b153f 14 int max (int a, int b) {
Mickado 0:d93aff6b153f 15 return (a<b)?b:a;
Mickado 0:d93aff6b153f 16 }
Mickado 0:d93aff6b153f 17
Mickado 0:d93aff6b153f 18 int min (int a, int b) {
Mickado 0:d93aff6b153f 19 return (a<b)?a:b;
Mickado 0:d93aff6b153f 20 }
Mickado 0:d93aff6b153f 21
Mickado 0:d93aff6b153f 22 void USART1_puts(char *text){
Mickado 0:d93aff6b153f 23 while(*text != '\0'){
Mickado 0:d93aff6b153f 24
Mickado 0:d93aff6b153f 25 if(carte.writeable()){
Mickado 0:d93aff6b153f 26 carte.putc(*text);
Mickado 0:d93aff6b153f 27 text++;
Mickado 0:d93aff6b153f 28 }
Mickado 0:d93aff6b153f 29
Mickado 0:d93aff6b153f 30 }
Mickado 0:d93aff6b153f 31 }
Mickado 0:d93aff6b153f 32
Mickado 0:d93aff6b153f 33
Mickado 0:d93aff6b153f 34 void format(char *msg, char *msg_formated){
Mickado 0:d93aff6b153f 35 int somme=5;
Mickado 0:d93aff6b153f 36 int i=0;
Mickado 0:d93aff6b153f 37 msg_formated[0]=2;
Mickado 0:d93aff6b153f 38 printf("\n\r");
Mickado 0:d93aff6b153f 39 while(msg[i]!=0){
Mickado 0:d93aff6b153f 40 somme= somme + msg[i];
Mickado 0:d93aff6b153f 41 msg_formated[i+1]=msg[i];
Mickado 0:d93aff6b153f 42 i++;
Mickado 0:d93aff6b153f 43 }
Mickado 0:d93aff6b153f 44 if(somme>255){
Mickado 0:d93aff6b153f 45 somme++;
Mickado 0:d93aff6b153f 46 }
Mickado 0:d93aff6b153f 47 somme=somme%256;
Mickado 0:d93aff6b153f 48 msg_formated[i+1]=~somme;
Mickado 0:d93aff6b153f 49 msg_formated[i+2]=3;
Mickado 0:d93aff6b153f 50 msg_formated[i+3]=0;
Mickado 0:d93aff6b153f 51
Mickado 0:d93aff6b153f 52 //A supprimer
Mickado 0:d93aff6b153f 53 i=0;
Mickado 0:d93aff6b153f 54 while(msg_formated[i]!=0){
Mickado 0:d93aff6b153f 55 printf("[%d] ", msg_formated[i]);
Mickado 0:d93aff6b153f 56 i++;
Mickado 0:d93aff6b153f 57 }
Mickado 0:d93aff6b153f 58 }
Mickado 0:d93aff6b153f 59
Mickado 0:d93aff6b153f 60
Mickado 0:d93aff6b153f 61 void send(char *data){
Mickado 0:d93aff6b153f 62 char trame[52]="";
Mickado 0:d93aff6b153f 63 format(data, trame);
Mickado 0:d93aff6b153f 64 USART1_puts(trame);
Mickado 0:d93aff6b153f 65 }
Mickado 0:d93aff6b153f 66
Mickado 0:d93aff6b153f 67 int receive(char *frame){
Mickado 0:d93aff6b153f 68 int I;
Mickado 0:d93aff6b153f 69 unsigned int sommeBuffer;
Mickado 0:d93aff6b153f 70 char r;
Mickado 0:d93aff6b153f 71 Timer timeout;
Mickado 0:d93aff6b153f 72 timeout.start();
Mickado 0:d93aff6b153f 73 while(1){
Mickado 0:d93aff6b153f 74 if(timeout.read_ms() > 100) return 1;
Mickado 0:d93aff6b153f 75 if(carte.readable()){
Mickado 0:d93aff6b153f 76 r = carte.getc();
Mickado 0:d93aff6b153f 77
Mickado 0:d93aff6b153f 78 switch(r){
Mickado 0:d93aff6b153f 79 case 2: //Start
Mickado 0:d93aff6b153f 80 I=0;
Mickado 0:d93aff6b153f 81 sommeBuffer=2;
Mickado 0:d93aff6b153f 82 break;
Mickado 0:d93aff6b153f 83
Mickado 0:d93aff6b153f 84 case 3: //Stop
Mickado 0:d93aff6b153f 85 frame[I]=0;
Mickado 0:d93aff6b153f 86 sommeBuffer+=3;
Mickado 0:d93aff6b153f 87
Mickado 0:d93aff6b153f 88 if(sommeBuffer>255){
Mickado 0:d93aff6b153f 89 sommeBuffer++;
Mickado 0:d93aff6b153f 90 }
Mickado 0:d93aff6b153f 91 sommeBuffer=~sommeBuffer;
Mickado 0:d93aff6b153f 92 sommeBuffer=sommeBuffer%256;
Mickado 0:d93aff6b153f 93
Mickado 0:d93aff6b153f 94 if(sommeBuffer==0){ //Les sommes concordent, les données sont valides
Mickado 0:d93aff6b153f 95 frame[I-1]=0;
Mickado 0:d93aff6b153f 96 return 0;
Mickado 0:d93aff6b153f 97 }else{ //Message invalidé par la somme
Mickado 0:d93aff6b153f 98 frame[0]=0;
Mickado 0:d93aff6b153f 99 return 1;
Mickado 0:d93aff6b153f 100 }
Mickado 0:d93aff6b153f 101
Mickado 0:d93aff6b153f 102 default :
Mickado 0:d93aff6b153f 103 frame[I]=r;
Mickado 0:d93aff6b153f 104 sommeBuffer+=r;
Mickado 0:d93aff6b153f 105 I++;
Mickado 0:d93aff6b153f 106 break;
Mickado 0:d93aff6b153f 107 }
Mickado 0:d93aff6b153f 108 }
Mickado 0:d93aff6b153f 109 }
Mickado 0:d93aff6b153f 110 }
Mickado 0:d93aff6b153f 111
Mickado 0:d93aff6b153f 112 int controle(char *frame){
Alex_Hochart 1:8558d2451e3e 113 if (*frame!=6) return 0;
Alex_Hochart 1:8558d2451e3e 114 else return 1;
Mickado 0:d93aff6b153f 115 }
Mickado 0:d93aff6b153f 116
Alex_Hochart 1:8558d2451e3e 117 void buzz_pulse(){
Alex_Hochart 1:8558d2451e3e 118
Mickado 0:d93aff6b153f 119 }
Alex_Hochart 1:8558d2451e3e 120
Alex_Hochart 1:8558d2451e3e 121 void startEmision(){
Alex_Hochart 1:8558d2451e3e 122
Mickado 0:d93aff6b153f 123 }
Mickado 0:d93aff6b153f 124
Mickado 0:d93aff6b153f 125 //Emission d'une trame, reception d'acquittement et vérification
Mickado 0:d93aff6b153f 126 int main() {
Mickado 0:d93aff6b153f 127 char trame[50];
Mickado 0:d93aff6b153f 128 int essai, error;
Mickado 0:d93aff6b153f 129 int value;
Mickado 0:d93aff6b153f 130 char message[4];
Alex_Hochart 1:8558d2451e3e 131 int i=0;
Alex_Hochart 1:8558d2451e3e 132 Timer time;
Mickado 0:d93aff6b153f 133
Alex_Hochart 1:8558d2451e3e 134 //int mem[2] = {-1, -1};
Mickado 0:d93aff6b153f 135
Mickado 0:d93aff6b153f 136 while(1){
Mickado 0:d93aff6b153f 137
Alex_Hochart 1:8558d2451e3e 138 time.reset();
Alex_Hochart 1:8558d2451e3e 139 time.start();
Alex_Hochart 1:8558d2451e3e 140 value=min(sensor1.distance(1),230);
Alex_Hochart 1:8558d2451e3e 141 value=max(value,0);
Mickado 0:d93aff6b153f 142
Alex_Hochart 1:8558d2451e3e 143 /*if(mem[0]<0){
Alex_Hochart 1:8558d2451e3e 144 mem[0]=value;
Alex_Hochart 1:8558d2451e3e 145 }else{
Alex_Hochart 1:8558d2451e3e 146 if(abs(mem[0]-value)<40){
Alex_Hochart 1:8558d2451e3e 147 mem[1]=mem[0];
Mickado 0:d93aff6b153f 148 mem[0]=value;
Mickado 0:d93aff6b153f 149 }else{
Alex_Hochart 1:8558d2451e3e 150 value=mem[0];
Mickado 0:d93aff6b153f 151 }
Alex_Hochart 1:8558d2451e3e 152 }*/
Mickado 0:d93aff6b153f 153
Mickado 0:d93aff6b153f 154
Alex_Hochart 1:8558d2451e3e 155 message[0]=48+(value/100)%10;
Alex_Hochart 1:8558d2451e3e 156 message[1]=48+(value/10)%10;
Alex_Hochart 1:8558d2451e3e 157 message[2]=48+value%10;
Alex_Hochart 1:8558d2451e3e 158 message[3]=0;
Mickado 0:d93aff6b153f 159
Alex_Hochart 1:8558d2451e3e 160 essai=0;
Alex_Hochart 1:8558d2451e3e 161 printf("%s\n\r",message);
Alex_Hochart 1:8558d2451e3e 162 send(message);
Alex_Hochart 1:8558d2451e3e 163
Alex_Hochart 1:8558d2451e3e 164 error=receive(trame);
Alex_Hochart 1:8558d2451e3e 165
Alex_Hochart 1:8558d2451e3e 166 while((controle(trame)==0 || error==1) && essai<3){
Alex_Hochart 1:8558d2451e3e 167 send(message);
Alex_Hochart 1:8558d2451e3e 168 error=receive(trame);
Alex_Hochart 1:8558d2451e3e 169 essai++;
Alex_Hochart 1:8558d2451e3e 170 }
Alex_Hochart 1:8558d2451e3e 171
Alex_Hochart 1:8558d2451e3e 172 if(essai<=3) {
Alex_Hochart 1:8558d2451e3e 173 while(time.read() <= 1){
Alex_Hochart 1:8558d2451e3e 174 for(i =0; i<=50;i++) {
Alex_Hochart 1:8558d2451e3e 175 buzz = 1;
Alex_Hochart 1:8558d2451e3e 176 wait_us(400);
Alex_Hochart 1:8558d2451e3e 177 buzz = 0;
Alex_Hochart 1:8558d2451e3e 178 wait_us(400);
Mickado 0:d93aff6b153f 179 }
Alex_Hochart 1:8558d2451e3e 180 wait_ms(value*5);
Mickado 0:d93aff6b153f 181 }
Alex_Hochart 1:8558d2451e3e 182 time.stop();
Alex_Hochart 1:8558d2451e3e 183 }
Mickado 0:d93aff6b153f 184 }
Mickado 0:d93aff6b153f 185 }