Contest IOT GSE5
/
Nucleo_radar_buz
aa
Fork of Nucleo_radar by
main.cpp@1:8558d2451e3e, 2015-12-02 (annotated)
- 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?
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 | |
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 | } |