Kart+xxxxx // Radar_RTOS

Dependencies:   Radar_RTOS mbed

Fork of Radar_RTOS by Contest IOT GSE5

Committer:
Mickado
Date:
Wed Nov 25 14:08:15 2015 +0000
Revision:
0:d93aff6b153f
Child:
1:8558d2451e3e
radar

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 //#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 }