APP4

Dependencies:   mbed-rtos mbed

Fork of rtos_basic by mbed official

Committer:
jpbaillargeon
Date:
Tue Oct 23 14:40:36 2018 +0000
Revision:
18:5c26a8f38248
Parent:
17:53d4674cb37f
Child:
19:ae8e7c9292d6
99% fonctionnel

Who changed what in which revision?

UserRevisionLine numberNew contents of line
emilmont 1:491820ee784d 1 #include "mbed.h"
leomerel 14:42a7d108b134 2 #include "rtos.h"
jpbaillargeon 13:3c020f9bfdc7 3
leomerel 14:42a7d108b134 4 DigitalOut dout(p18);
leomerel 14:42a7d108b134 5 InterruptIn button(p5);
leomerel 15:872151771dec 6 DigitalOut led1(LED1);
leomerel 15:872151771dec 7 DigitalOut led2(LED2);
leomerel 15:872151771dec 8 DigitalOut led3(LED3);
leomerel 14:42a7d108b134 9 DigitalOut flash(LED4);
leomerel 15:872151771dec 10 DigitalIn pin12(p12);
leomerel 12:cfa3dec9e9a3 11
leomerel 14:42a7d108b134 12 int periode = 10; //10ms
leomerel 15:872151771dec 13 int periode_reception = 30;
leomerel 12:cfa3dec9e9a3 14 bool PREAMBULE[] = {0,1,0,1,0,1,0,1};
leomerel 12:cfa3dec9e9a3 15 bool START_END[] = {0,1,1,1,1,1,1,0};
leomerel 14:42a7d108b134 16 Thread envoi_t;
leomerel 14:42a7d108b134 17 Thread reception_t;
leomerel 15:872151771dec 18 Thread detection_t;
leomerel 15:872151771dec 19
leomerel 15:872151771dec 20 typedef struct {
leomerel 15:872151771dec 21 int time;
leomerel 15:872151771dec 22 bool front;
leomerel 15:872151771dec 23 } message_t;
leomerel 15:872151771dec 24
jpbaillargeon 16:a163a7c0315b 25 Mail<message_t,64> mail_box;
leomerel 15:872151771dec 26 Timer timer;
leomerel 15:872151771dec 27 int etat;
leomerel 12:cfa3dec9e9a3 28
leomerel 14:42a7d108b134 29 bool messageUtile[64] = {0,0,1,0,1,1,1,0,
leomerel 14:42a7d108b134 30 1,0,1,0,0,0,0,0,
leomerel 14:42a7d108b134 31 0,0,1,1,1,0,1,0,
leomerel 14:42a7d108b134 32 1,1,0,0,0,1,1,0,
leomerel 14:42a7d108b134 33 0,1,0,1,1,0,1,1,
leomerel 14:42a7d108b134 34 1,0,1,0,1,1,1,0,
leomerel 14:42a7d108b134 35 0,0,1,0,1,0,0,0,
leomerel 14:42a7d108b134 36 1,0,1,0,1,1,0,0};
leomerel 12:cfa3dec9e9a3 37
jpbaillargeon 16:a163a7c0315b 38 //CRC16 (détection des erreurs) ----------------------------------------------------------------------------------------------------
jpbaillargeon 16:a163a7c0315b 39 unsigned short crc16(bool* data_p, int length){
jpbaillargeon 16:a163a7c0315b 40 unsigned char x;
jpbaillargeon 16:a163a7c0315b 41 unsigned short crc = 0xFFFF;
jpbaillargeon 16:a163a7c0315b 42
jpbaillargeon 16:a163a7c0315b 43 while (length--){
jpbaillargeon 16:a163a7c0315b 44 x = crc >> 8 ^ *data_p++;
jpbaillargeon 16:a163a7c0315b 45 x ^= x>>4;
jpbaillargeon 16:a163a7c0315b 46 crc = (crc << 8) ^ ((unsigned short)(x << 12)) ^ ((unsigned short)(x <<5)) ^ ((unsigned short)x);
jpbaillargeon 16:a163a7c0315b 47 }
jpbaillargeon 16:a163a7c0315b 48 return crc;
jpbaillargeon 16:a163a7c0315b 49 }
jpbaillargeon 16:a163a7c0315b 50
leomerel 14:42a7d108b134 51 //convert length from int to binary -----------------------------------------------------------------------------------------------------
leomerel 14:42a7d108b134 52 bool r;
leomerel 14:42a7d108b134 53 void int_to_bin(bool bin[8], int length){ //Fonctionne
leomerel 14:42a7d108b134 54 int i = 0;
jpbaillargeon 17:53d4674cb37f 55 while(length >0 && i<8){
leomerel 14:42a7d108b134 56 r = length%2;
leomerel 14:42a7d108b134 57 length/=2;
leomerel 14:42a7d108b134 58 bin[7-i]=r;
leomerel 14:42a7d108b134 59 i++;
leomerel 14:42a7d108b134 60 }
leomerel 14:42a7d108b134 61 while(i<8){
leomerel 14:42a7d108b134 62 bin[i]=0;
leomerel 14:42a7d108b134 63 i++;
leomerel 14:42a7d108b134 64 }
leomerel 14:42a7d108b134 65 }
leomerel 14:42a7d108b134 66
leomerel 14:42a7d108b134 67 //convert to Manchester ------------------------------------------------------------------------------------------------
leomerel 14:42a7d108b134 68 void convertBitToManchester(bool *manchester, bool bit){ //Fonctionne
leomerel 14:42a7d108b134 69 if(bit == 0){
leomerel 14:42a7d108b134 70 manchester[0]=0;
leomerel 14:42a7d108b134 71 manchester[1]=1;
leomerel 12:cfa3dec9e9a3 72 }
leomerel 14:42a7d108b134 73 else if(bit == 1){
leomerel 14:42a7d108b134 74 manchester[0]=1;
leomerel 14:42a7d108b134 75 manchester[1]=0;
emilmont 1:491820ee784d 76 }
emilmont 1:491820ee784d 77 }
leomerel 12:cfa3dec9e9a3 78
leomerel 14:42a7d108b134 79 void convertByteToManchester(bool *manchester, bool byte[8]){ //Fonctionne
leomerel 14:42a7d108b134 80 for(int i=0; i<8; i++){
leomerel 14:42a7d108b134 81 if(byte[i] == 0){
leomerel 14:42a7d108b134 82 manchester[i*2]=0;
leomerel 14:42a7d108b134 83 manchester[i*2+1]=1;
leomerel 14:42a7d108b134 84 }
leomerel 14:42a7d108b134 85 else if(byte[i] == 1){
leomerel 14:42a7d108b134 86 manchester[i*2]=1;
leomerel 14:42a7d108b134 87 manchester[i*2+1]=0;
leomerel 14:42a7d108b134 88 }
leomerel 14:42a7d108b134 89 }
leomerel 14:42a7d108b134 90 }
leomerel 12:cfa3dec9e9a3 91
leomerel 14:42a7d108b134 92 void convertMessageToManchester(bool *manchester, bool *message, int length){
leomerel 14:42a7d108b134 93 for(int i=0; i<length; i++){
leomerel 14:42a7d108b134 94 if(message[i] == 0){
leomerel 14:42a7d108b134 95 manchester[i*2]=0;
leomerel 14:42a7d108b134 96 manchester[i*2+1]=1;
leomerel 14:42a7d108b134 97 }
leomerel 14:42a7d108b134 98 else if(message[i] == 1){
leomerel 14:42a7d108b134 99 manchester[i*2]=1;
leomerel 14:42a7d108b134 100 manchester[i*2+1]=0;
leomerel 14:42a7d108b134 101 }
leomerel 14:42a7d108b134 102 }
leomerel 12:cfa3dec9e9a3 103 }
leomerel 12:cfa3dec9e9a3 104
leomerel 14:42a7d108b134 105 //création d'une trame --------------------------------------------------------------------------------------------------------------
leomerel 14:42a7d108b134 106 void creationTrame(bool *message, int length){ //Fonctionne
leomerel 14:42a7d108b134 107 printf("OK1 \r\n");
leomerel 14:42a7d108b134 108 bool bin[8];
leomerel 14:42a7d108b134 109 int_to_bin(bin, length);
leomerel 14:42a7d108b134 110 printf("OK2 \r\n");
leomerel 14:42a7d108b134 111 for(int i=0; i<8; i++){
leomerel 14:42a7d108b134 112 *message=PREAMBULE[i];
leomerel 14:42a7d108b134 113 message++;
leomerel 14:42a7d108b134 114 }
leomerel 14:42a7d108b134 115 printf("OK3 \r\n");
leomerel 14:42a7d108b134 116 for(int i=0; i<8; i++){
leomerel 14:42a7d108b134 117 *message=START_END[i];
leomerel 14:42a7d108b134 118 message++;
leomerel 14:42a7d108b134 119 }
leomerel 14:42a7d108b134 120 for(int i=0; i<8; i++){
leomerel 14:42a7d108b134 121 *message=0;
leomerel 14:42a7d108b134 122 message++;
leomerel 14:42a7d108b134 123 }
leomerel 14:42a7d108b134 124 for(int i=0; i<8; i++){
leomerel 14:42a7d108b134 125 *message=bin[i];
leomerel 14:42a7d108b134 126 message++;
leomerel 14:42a7d108b134 127 }
leomerel 14:42a7d108b134 128 for(int i=0; i<sizeof(messageUtile); i++){
leomerel 14:42a7d108b134 129 *message=messageUtile[i];
leomerel 14:42a7d108b134 130 message++;
leomerel 14:42a7d108b134 131 }
leomerel 14:42a7d108b134 132 //CRC16
jpbaillargeon 16:a163a7c0315b 133 unsigned short crc = crc16(messageUtile, (int)sizeof(messageUtile));
jpbaillargeon 17:53d4674cb37f 134 printf("\r\n -----------------CRC: %d-------------\r\n", crc);
jpbaillargeon 16:a163a7c0315b 135 int_to_bin(bin, crc);
leomerel 14:42a7d108b134 136 for(int i=0; i<8; i++){
jpbaillargeon 16:a163a7c0315b 137 *message=bin[i];
jpbaillargeon 16:a163a7c0315b 138 message++;
leomerel 14:42a7d108b134 139 }
leomerel 14:42a7d108b134 140 for(int i=0; i<8; i++){
leomerel 14:42a7d108b134 141 *message=START_END[i];
leomerel 14:42a7d108b134 142 message++;
leomerel 14:42a7d108b134 143 }
leomerel 14:42a7d108b134 144 }
leomerel 14:42a7d108b134 145
leomerel 14:42a7d108b134 146 //Envoi d'une trame ----------------------------------------------------------------------------------------------------------------
leomerel 14:42a7d108b134 147 void envoiTrame(){
leomerel 15:872151771dec 148 bool app=false;
jpbaillargeon 16:a163a7c0315b 149 int length3 = sizeof(messageUtile);
jpbaillargeon 16:a163a7c0315b 150 bool message3[length3+6*8];
jpbaillargeon 16:a163a7c0315b 151 bool manchester3[(length3+6*8)*2];
jpbaillargeon 16:a163a7c0315b 152
jpbaillargeon 16:a163a7c0315b 153 creationTrame(message3,length3);
jpbaillargeon 16:a163a7c0315b 154 convertMessageToManchester(manchester3, message3,length3+6*8);
leomerel 15:872151771dec 155 while(1){
leomerel 15:872151771dec 156 if(pin12 && !app){
jpbaillargeon 16:a163a7c0315b 157 //bool manchester3[32] = {1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0};
leomerel 15:872151771dec 158 app=true;
leomerel 15:872151771dec 159 for(int i=0; i<sizeof(manchester3); i++){
leomerel 15:872151771dec 160 dout = manchester3[i];
leomerel 15:872151771dec 161 Thread::wait(periode);
leomerel 15:872151771dec 162 }
leomerel 15:872151771dec 163 }
leomerel 15:872151771dec 164 else if(!pin12 && app){
leomerel 15:872151771dec 165 app=false;
leomerel 15:872151771dec 166 }
leomerel 14:42a7d108b134 167 }
leomerel 14:42a7d108b134 168 }
leomerel 14:42a7d108b134 169
jpbaillargeon 16:a163a7c0315b 170
leomerel 14:42a7d108b134 171
leomerel 14:42a7d108b134 172
leomerel 14:42a7d108b134 173 //detection du préambule
leomerel 14:42a7d108b134 174 void detectionPreambule() {
leomerel 15:872151771dec 175 int compteur = 0;
leomerel 15:872151771dec 176 int prev_time;
leomerel 15:872151771dec 177 int t;
jpbaillargeon 16:a163a7c0315b 178 bool preambule[8];
jpbaillargeon 16:a163a7c0315b 179 bool start[8];
jpbaillargeon 16:a163a7c0315b 180 bool flag[8];
jpbaillargeon 16:a163a7c0315b 181 bool longueur[8];
jpbaillargeon 16:a163a7c0315b 182 bool message[64];
jpbaillargeon 16:a163a7c0315b 183 bool checksum[8];
jpbaillargeon 16:a163a7c0315b 184 bool end[8];
jpbaillargeon 16:a163a7c0315b 185 int longInt;
jpbaillargeon 16:a163a7c0315b 186 bool bin2[8];
jpbaillargeon 18:5c26a8f38248 187 int temps =0;
jpbaillargeon 18:5c26a8f38248 188 int tMax;
jpbaillargeon 18:5c26a8f38248 189 int tMin;
leomerel 14:42a7d108b134 190 while(1){
leomerel 15:872151771dec 191 osEvent evt = mail_box.get();
leomerel 15:872151771dec 192 if (evt.status == osEventMail) {
leomerel 15:872151771dec 193 message_t *f = (message_t*)evt.value.p;
leomerel 15:872151771dec 194 led3 = f->front;
leomerel 15:872151771dec 195 t = f->time;
jpbaillargeon 16:a163a7c0315b 196 if(etat==0) {
jpbaillargeon 16:a163a7c0315b 197 if(f->front == 0){
leomerel 15:872151771dec 198 compteur=0;
leomerel 15:872151771dec 199 timer.start();
leomerel 15:872151771dec 200 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
leomerel 15:872151771dec 201 preambule[compteur] = f->front;
jpbaillargeon 16:a163a7c0315b 202 prev_time = t;
jpbaillargeon 16:a163a7c0315b 203 compteur++;
leomerel 15:872151771dec 204 etat = 1;
jpbaillargeon 16:a163a7c0315b 205 printf("-----ETAT 1-----\r\n");
leomerel 15:872151771dec 206 }
jpbaillargeon 16:a163a7c0315b 207 }
jpbaillargeon 16:a163a7c0315b 208
jpbaillargeon 16:a163a7c0315b 209 else if(etat==1) {
jpbaillargeon 16:a163a7c0315b 210 if(f->front==1){
jpbaillargeon 18:5c26a8f38248 211 //if((t-prev_time)<=35 && (t-prev_time)>=20){
leomerel 15:872151771dec 212 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
leomerel 15:872151771dec 213 preambule[compteur] = f->front;
jpbaillargeon 16:a163a7c0315b 214 prev_time = t;
jpbaillargeon 16:a163a7c0315b 215 compteur++;
jpbaillargeon 16:a163a7c0315b 216 etat = 2;
jpbaillargeon 16:a163a7c0315b 217 printf("-----ETAT 2-----\r\n");
jpbaillargeon 18:5c26a8f38248 218 /*}
jpbaillargeon 16:a163a7c0315b 219 else{
jpbaillargeon 16:a163a7c0315b 220 etat=0;
jpbaillargeon 16:a163a7c0315b 221 printf("------FAIL------\r\n");
jpbaillargeon 18:5c26a8f38248 222 }*/
leomerel 15:872151771dec 223 }
leomerel 15:872151771dec 224 }
jpbaillargeon 16:a163a7c0315b 225
jpbaillargeon 16:a163a7c0315b 226 else if(etat==2) {
jpbaillargeon 18:5c26a8f38248 227 //if((t-prev_time)<=35 && (t-prev_time)>=20){
jpbaillargeon 16:a163a7c0315b 228 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 229 preambule[compteur] = f->front;
jpbaillargeon 18:5c26a8f38248 230 temps += t-prev_time;
jpbaillargeon 16:a163a7c0315b 231 prev_time = t;
jpbaillargeon 16:a163a7c0315b 232 compteur++;
jpbaillargeon 18:5c26a8f38248 233 //}
jpbaillargeon 16:a163a7c0315b 234 }
jpbaillargeon 16:a163a7c0315b 235
jpbaillargeon 16:a163a7c0315b 236 else if(etat ==3) {
jpbaillargeon 18:5c26a8f38248 237 //if((t-prev_time)<=35 && (t-prev_time)>=20){
jpbaillargeon 18:5c26a8f38248 238 if((t-prev_time)==temps){
leomerel 15:872151771dec 239 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 240 start[compteur-8] = f->front;
jpbaillargeon 16:a163a7c0315b 241 prev_time = t;
jpbaillargeon 16:a163a7c0315b 242 compteur++;
leomerel 15:872151771dec 243 }
jpbaillargeon 16:a163a7c0315b 244 }
jpbaillargeon 16:a163a7c0315b 245
jpbaillargeon 16:a163a7c0315b 246 else if(etat ==4) {
jpbaillargeon 18:5c26a8f38248 247 //if((t-prev_time)<=35 && (t-prev_time)>=20){
jpbaillargeon 18:5c26a8f38248 248 if((t-prev_time)==temps){
jpbaillargeon 16:a163a7c0315b 249 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 250 flag[compteur-16] = f->front;
jpbaillargeon 16:a163a7c0315b 251 prev_time = t;
jpbaillargeon 16:a163a7c0315b 252 compteur++;
jpbaillargeon 16:a163a7c0315b 253 }
jpbaillargeon 16:a163a7c0315b 254 }
jpbaillargeon 16:a163a7c0315b 255
jpbaillargeon 16:a163a7c0315b 256 else if(etat ==5) {
jpbaillargeon 18:5c26a8f38248 257 //if((t-prev_time)<=35 && (t-prev_time)>=20){
jpbaillargeon 18:5c26a8f38248 258 if((t-prev_time)==temps){
leomerel 15:872151771dec 259 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 260 longueur[compteur-24] = f->front;
jpbaillargeon 16:a163a7c0315b 261 prev_time = t;
jpbaillargeon 16:a163a7c0315b 262 compteur++;
jpbaillargeon 16:a163a7c0315b 263 }
jpbaillargeon 16:a163a7c0315b 264 }
jpbaillargeon 16:a163a7c0315b 265 else if(etat ==6) {
jpbaillargeon 18:5c26a8f38248 266 //if((t-prev_time)<=35 && (t-prev_time)>=20){
jpbaillargeon 18:5c26a8f38248 267 if((t-prev_time)==temps){
jpbaillargeon 16:a163a7c0315b 268 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 269 message[compteur-32]= f->front;
jpbaillargeon 16:a163a7c0315b 270 prev_time = t;
jpbaillargeon 16:a163a7c0315b 271 compteur++;
leomerel 15:872151771dec 272 }
jpbaillargeon 16:a163a7c0315b 273 }
jpbaillargeon 16:a163a7c0315b 274 else if(etat ==7) {
jpbaillargeon 18:5c26a8f38248 275 //if((t-prev_time)<=35 && (t-prev_time)>=20){
jpbaillargeon 18:5c26a8f38248 276 if((t-prev_time)==temps){
jpbaillargeon 16:a163a7c0315b 277 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 278 checksum[compteur-32-longInt]= f->front;
jpbaillargeon 16:a163a7c0315b 279 prev_time = t;
jpbaillargeon 16:a163a7c0315b 280 compteur++;
jpbaillargeon 16:a163a7c0315b 281 }
jpbaillargeon 16:a163a7c0315b 282 }
jpbaillargeon 16:a163a7c0315b 283 else if(etat ==8) {
jpbaillargeon 18:5c26a8f38248 284 //if((t-prev_time)<=35 && (t-prev_time)>=20){
jpbaillargeon 18:5c26a8f38248 285 if((t-prev_time)==temps){
jpbaillargeon 16:a163a7c0315b 286 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 287 end[compteur-40-longInt]= f->front;
jpbaillargeon 16:a163a7c0315b 288 prev_time = t;
jpbaillargeon 16:a163a7c0315b 289 compteur++;
jpbaillargeon 16:a163a7c0315b 290 }
jpbaillargeon 16:a163a7c0315b 291 }
leomerel 15:872151771dec 292 mail_box.free(f);
leomerel 15:872151771dec 293 }
jpbaillargeon 16:a163a7c0315b 294
jpbaillargeon 17:53d4674cb37f 295 if((compteur ==8) && (etat ==2)){
jpbaillargeon 17:53d4674cb37f 296 etat = 3;
jpbaillargeon 16:a163a7c0315b 297 for(int i=0; i<8;i++){
jpbaillargeon 17:53d4674cb37f 298 if((preambule[i]!= PREAMBULE[i]) && (etat !=0 ))
jpbaillargeon 16:a163a7c0315b 299 {
jpbaillargeon 16:a163a7c0315b 300 etat =0;
jpbaillargeon 17:53d4674cb37f 301 printf("\r\n------Pas le bon PREAMBULE------\r\n");
leomerel 15:872151771dec 302 }
leomerel 15:872151771dec 303 printf("%d", preambule[i]);
leomerel 15:872151771dec 304 }
leomerel 15:872151771dec 305 printf("\r\n");
jpbaillargeon 17:53d4674cb37f 306 if(etat != 0)
jpbaillargeon 17:53d4674cb37f 307 {
jpbaillargeon 18:5c26a8f38248 308 temps /=6;
jpbaillargeon 18:5c26a8f38248 309 tMin = 0.90*temps;
jpbaillargeon 18:5c26a8f38248 310 tMax = 1.10*temps;
jpbaillargeon 18:5c26a8f38248 311 printf("-----ETAT 3 %d-----\r\n", temps);
jpbaillargeon 17:53d4674cb37f 312 }
leomerel 15:872151771dec 313 }
jpbaillargeon 17:53d4674cb37f 314 else if((compteur ==16) && (etat == 3)) {
jpbaillargeon 17:53d4674cb37f 315 etat =4;
jpbaillargeon 16:a163a7c0315b 316 for(int i=0; i<8;i++){
jpbaillargeon 17:53d4674cb37f 317 if((start[i]!= START_END[i]) && (etat != 0))
jpbaillargeon 16:a163a7c0315b 318 {
jpbaillargeon 16:a163a7c0315b 319 etat =0;
jpbaillargeon 17:53d4674cb37f 320 printf("\r\n------Pas le bon START------\r\n");
jpbaillargeon 16:a163a7c0315b 321 }
jpbaillargeon 16:a163a7c0315b 322 printf("%d", start[i]);
jpbaillargeon 16:a163a7c0315b 323 }
jpbaillargeon 16:a163a7c0315b 324 printf("\r\n");
jpbaillargeon 17:53d4674cb37f 325 if(etat != 0)
jpbaillargeon 17:53d4674cb37f 326 {
jpbaillargeon 17:53d4674cb37f 327 printf("-----ETAT 4-----\r\n");
jpbaillargeon 17:53d4674cb37f 328 }
jpbaillargeon 16:a163a7c0315b 329 }
jpbaillargeon 17:53d4674cb37f 330 else if((compteur==24) && (etat ==4)) {
jpbaillargeon 16:a163a7c0315b 331 for(int i=0; i<8;i++){
jpbaillargeon 16:a163a7c0315b 332 printf("%d", flag[i]);
jpbaillargeon 16:a163a7c0315b 333 }
jpbaillargeon 16:a163a7c0315b 334 printf("\r\n");
jpbaillargeon 16:a163a7c0315b 335 etat =5;
jpbaillargeon 16:a163a7c0315b 336 printf("-----ETAT 5 -----\r\n");
jpbaillargeon 16:a163a7c0315b 337 }
jpbaillargeon 17:53d4674cb37f 338 else if((compteur==32) && (etat ==5)) {
jpbaillargeon 16:a163a7c0315b 339 longInt=0;
jpbaillargeon 16:a163a7c0315b 340 for(int i = 0; i<8; i++) {
jpbaillargeon 16:a163a7c0315b 341 longInt = longInt*2+longueur[i];
jpbaillargeon 16:a163a7c0315b 342 }
jpbaillargeon 16:a163a7c0315b 343 printf("%d\r\n", longInt);
jpbaillargeon 16:a163a7c0315b 344 etat =6;
jpbaillargeon 16:a163a7c0315b 345 printf("-----ETAT 6 -----\r\n");
jpbaillargeon 16:a163a7c0315b 346 }
jpbaillargeon 17:53d4674cb37f 347 else if((compteur==32+longInt) && (etat ==6)) {
jpbaillargeon 16:a163a7c0315b 348 for(int i=0; i<longInt;i++){
jpbaillargeon 16:a163a7c0315b 349 printf("%d", message[i]);
jpbaillargeon 16:a163a7c0315b 350 }
jpbaillargeon 16:a163a7c0315b 351 printf("\r\n");
jpbaillargeon 16:a163a7c0315b 352 etat =7;
jpbaillargeon 16:a163a7c0315b 353 printf("-----ETAT 7-----\r\n");
jpbaillargeon 16:a163a7c0315b 354 }
jpbaillargeon 16:a163a7c0315b 355
jpbaillargeon 17:53d4674cb37f 356 else if((compteur == 40 +longInt) && (etat ==7)) {
jpbaillargeon 17:53d4674cb37f 357 etat =8;
jpbaillargeon 16:a163a7c0315b 358 unsigned short crc = crc16(message, (int)sizeof(message));
jpbaillargeon 17:53d4674cb37f 359 printf("\r\n -----------------CRC: %d-------------\r\n", crc);
jpbaillargeon 17:53d4674cb37f 360 int_to_bin(bin2, crc);
jpbaillargeon 16:a163a7c0315b 361 for(int i=0; i<8;i++){
jpbaillargeon 17:53d4674cb37f 362 printf("%d", bin2[i]);
jpbaillargeon 17:53d4674cb37f 363 if((bin2[i] != checksum[i]) && (etat !=0)) {
jpbaillargeon 16:a163a7c0315b 364 etat =0;
jpbaillargeon 17:53d4674cb37f 365 printf("\r\n------Pas le bon CRC------\r\n");
jpbaillargeon 17:53d4674cb37f 366 }
jpbaillargeon 16:a163a7c0315b 367 }
jpbaillargeon 16:a163a7c0315b 368
jpbaillargeon 16:a163a7c0315b 369 printf("\r\n");
jpbaillargeon 17:53d4674cb37f 370 if(etat != 0)
jpbaillargeon 17:53d4674cb37f 371 {
jpbaillargeon 17:53d4674cb37f 372 printf("-----ETAT 8-----\r\n");
jpbaillargeon 17:53d4674cb37f 373 }
jpbaillargeon 16:a163a7c0315b 374 }
jpbaillargeon 17:53d4674cb37f 375 else if((compteur == 48 +longInt) && (etat ==8)) {
jpbaillargeon 16:a163a7c0315b 376 for(int i=0; i<8;i++){
jpbaillargeon 16:a163a7c0315b 377 if(end[i]!= START_END[i])
jpbaillargeon 16:a163a7c0315b 378 {
jpbaillargeon 16:a163a7c0315b 379 etat =0;
jpbaillargeon 17:53d4674cb37f 380 printf("\r\n------Pas le bon END------\r\n");
jpbaillargeon 16:a163a7c0315b 381 }
jpbaillargeon 16:a163a7c0315b 382 printf("%d", end[i]);
jpbaillargeon 16:a163a7c0315b 383 }
jpbaillargeon 16:a163a7c0315b 384 printf("\r\n");
jpbaillargeon 16:a163a7c0315b 385 etat =0;
jpbaillargeon 16:a163a7c0315b 386 printf("-----ETAT 0-----\r\n");
jpbaillargeon 16:a163a7c0315b 387 }
leomerel 14:42a7d108b134 388 }
leomerel 14:42a7d108b134 389 }
leomerel 14:42a7d108b134 390
leomerel 12:cfa3dec9e9a3 391 //reception des trames
leomerel 14:42a7d108b134 392 void receptionTrames(){
leomerel 14:42a7d108b134 393 }
leomerel 14:42a7d108b134 394
leomerel 14:42a7d108b134 395 //decode Manchester ------------------------------------------------------------------------------------------------------------------
leomerel 14:42a7d108b134 396 void decodeManchester(bool *data){
leomerel 14:42a7d108b134 397
leomerel 14:42a7d108b134 398 }
leomerel 14:42a7d108b134 399
leomerel 14:42a7d108b134 400
leomerel 14:42a7d108b134 401
leomerel 12:cfa3dec9e9a3 402 //assemblage des trames
leomerel 12:cfa3dec9e9a3 403 //desassemblage des trames
leomerel 12:cfa3dec9e9a3 404
leomerel 12:cfa3dec9e9a3 405
leomerel 15:872151771dec 406 void rise() {
leomerel 15:872151771dec 407 led1 = !led1;
leomerel 14:42a7d108b134 408 //printf("\r\n C'est bon \r\n");
leomerel 15:872151771dec 409 message_t *a = mail_box.alloc();
leomerel 15:872151771dec 410 a->time = timer.read_ms();;
leomerel 15:872151771dec 411 a->front = 0;
leomerel 15:872151771dec 412 mail_box.put(a);
leomerel 15:872151771dec 413 }
leomerel 15:872151771dec 414
leomerel 15:872151771dec 415 void fall() {
leomerel 15:872151771dec 416 led2 = !led2;
leomerel 15:872151771dec 417 //printf("\r\n C'est bon \r\n");
leomerel 15:872151771dec 418 message_t *a = mail_box.alloc();
leomerel 15:872151771dec 419 a->time = timer.read_ms();;
leomerel 15:872151771dec 420 a->front = 1;
leomerel 15:872151771dec 421 mail_box.put(a);
leomerel 14:42a7d108b134 422 }
leomerel 14:42a7d108b134 423
leomerel 14:42a7d108b134 424
emilmont 1:491820ee784d 425 int main() {
leomerel 14:42a7d108b134 426 /*while(1) {
leomerel 12:cfa3dec9e9a3 427 for(int i=0; i<sizeof(message); i++){
leomerel 12:cfa3dec9e9a3 428 convertToManchester(message[i]);
leomerel 12:cfa3dec9e9a3 429 printf("OK\r\n");
leomerel 12:cfa3dec9e9a3 430 }
leomerel 14:42a7d108b134 431 wait(1);*/
leomerel 14:42a7d108b134 432 /*int length = sizeof(message);
leomerel 14:42a7d108b134 433 printf("%d \r\n", length);
leomerel 14:42a7d108b134 434 printf("Binary length : ");
leomerel 14:42a7d108b134 435 for(int i=0; i<8; i++){
leomerel 14:42a7d108b134 436 printf("%d",bin[i]);
leomerel 14:42a7d108b134 437 }
leomerel 14:42a7d108b134 438 printf("\r\n");*/
leomerel 14:42a7d108b134 439
leomerel 14:42a7d108b134 440 int length = sizeof(messageUtile);
leomerel 14:42a7d108b134 441 bool message[length+6*8];
leomerel 14:42a7d108b134 442 creationTrame(message,length);
leomerel 14:42a7d108b134 443 printf("Message : ");
leomerel 14:42a7d108b134 444 for(int i=0; i<sizeof(message); i++){
leomerel 14:42a7d108b134 445 if(i>0 && i%8 == 0){
leomerel 14:42a7d108b134 446 printf(" ");
leomerel 14:42a7d108b134 447 }
leomerel 14:42a7d108b134 448 printf("%d",message[i]);
leomerel 14:42a7d108b134 449 }
leomerel 14:42a7d108b134 450 printf("\r\n");
leomerel 14:42a7d108b134 451
leomerel 14:42a7d108b134 452
leomerel 14:42a7d108b134 453 bool manchester[16];
leomerel 14:42a7d108b134 454 bool byte[8] = {0,1,0,0,1,1,1,0};
leomerel 14:42a7d108b134 455 convertByteToManchester(manchester,byte);
leomerel 14:42a7d108b134 456 printf("Manchester : ");
leomerel 14:42a7d108b134 457 for(int i=0; i<16; i++){
leomerel 14:42a7d108b134 458 if(i>0 && i%2 == 0){
leomerel 14:42a7d108b134 459 printf(" ");
leomerel 14:42a7d108b134 460 }
leomerel 14:42a7d108b134 461 printf("%d",manchester[i]);
leomerel 14:42a7d108b134 462 }
leomerel 14:42a7d108b134 463 printf("\r\n");
leomerel 14:42a7d108b134 464
leomerel 14:42a7d108b134 465 int length2 = sizeof(messageUtile);
leomerel 14:42a7d108b134 466 bool message2[length2+6*8];
leomerel 14:42a7d108b134 467 bool manchester2[(length2+6*8)*2];
leomerel 14:42a7d108b134 468 creationTrame(message2,length2);
leomerel 14:42a7d108b134 469 convertMessageToManchester(manchester2, message2, length2+6*8);
leomerel 14:42a7d108b134 470 printf("Message : \r\n");
leomerel 14:42a7d108b134 471 for(int i=0; i<sizeof(manchester2); i++){
leomerel 14:42a7d108b134 472 if(i>0 && i%16 == 0){
leomerel 14:42a7d108b134 473 printf("\r\n");
leomerel 14:42a7d108b134 474 }
leomerel 14:42a7d108b134 475 if(i>0 && i%2 == 0){
leomerel 14:42a7d108b134 476 printf(" ");
leomerel 14:42a7d108b134 477 }
leomerel 14:42a7d108b134 478 printf("%d",manchester2[i]);
leomerel 14:42a7d108b134 479 }
leomerel 14:42a7d108b134 480 printf("\r\n");
leomerel 14:42a7d108b134 481
leomerel 15:872151771dec 482
leomerel 15:872151771dec 483
leomerel 14:42a7d108b134 484 envoi_t.start(envoiTrame);
leomerel 14:42a7d108b134 485 reception_t.start(receptionTrames);
leomerel 15:872151771dec 486 detection_t.start(detectionPreambule);
leomerel 15:872151771dec 487 button.rise(&rise); // attach the address of the flip function to the rising edge
leomerel 15:872151771dec 488 button.fall(&fall);
leomerel 14:42a7d108b134 489 while(1) { // wait around, interrupts will interrupt this!
leomerel 14:42a7d108b134 490 flash = !flash;
leomerel 14:42a7d108b134 491 wait(0.25);
leomerel 14:42a7d108b134 492 }
emilmont 1:491820ee784d 493 }
jpbaillargeon 16:a163a7c0315b 494