APP4

Dependencies:   mbed-rtos mbed

Fork of rtos_basic by mbed official

Committer:
jpbaillargeon
Date:
Tue Oct 23 00:56:17 2018 +0000
Revision:
16:a163a7c0315b
Parent:
15:872151771dec
Child:
17:53d4674cb37f
:)

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;
leomerel 14:42a7d108b134 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 16:a163a7c0315b 134 printf("/r/n -----------------%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];
leomerel 14:42a7d108b134 187 while(1){
leomerel 15:872151771dec 188 osEvent evt = mail_box.get();
leomerel 15:872151771dec 189 if (evt.status == osEventMail) {
leomerel 15:872151771dec 190 message_t *f = (message_t*)evt.value.p;
leomerel 15:872151771dec 191 led3 = f->front;
leomerel 15:872151771dec 192 t = f->time;
jpbaillargeon 16:a163a7c0315b 193 if(etat==0) {
jpbaillargeon 16:a163a7c0315b 194 if(f->front == 0){
leomerel 15:872151771dec 195 compteur=0;
leomerel 15:872151771dec 196 timer.start();
leomerel 15:872151771dec 197 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
leomerel 15:872151771dec 198 preambule[compteur] = f->front;
jpbaillargeon 16:a163a7c0315b 199 prev_time = t;
jpbaillargeon 16:a163a7c0315b 200 compteur++;
leomerel 15:872151771dec 201 etat = 1;
jpbaillargeon 16:a163a7c0315b 202 printf("-----ETAT 1-----\r\n");
leomerel 15:872151771dec 203 }
jpbaillargeon 16:a163a7c0315b 204 }
jpbaillargeon 16:a163a7c0315b 205
jpbaillargeon 16:a163a7c0315b 206 else if(etat==1) {
jpbaillargeon 16:a163a7c0315b 207 if(f->front==1){
jpbaillargeon 16:a163a7c0315b 208 if((t-prev_time)<=35 && (t-prev_time)>=20){
leomerel 15:872151771dec 209 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
leomerel 15:872151771dec 210 preambule[compteur] = f->front;
jpbaillargeon 16:a163a7c0315b 211 prev_time = t;
jpbaillargeon 16:a163a7c0315b 212 compteur++;
jpbaillargeon 16:a163a7c0315b 213 etat = 2;
jpbaillargeon 16:a163a7c0315b 214 printf("-----ETAT 2-----\r\n");
jpbaillargeon 16:a163a7c0315b 215 }
jpbaillargeon 16:a163a7c0315b 216 else{
jpbaillargeon 16:a163a7c0315b 217 etat=0;
jpbaillargeon 16:a163a7c0315b 218 printf("------FAIL------\r\n");
leomerel 15:872151771dec 219 }
leomerel 15:872151771dec 220 }
leomerel 15:872151771dec 221 }
jpbaillargeon 16:a163a7c0315b 222
jpbaillargeon 16:a163a7c0315b 223 else if(etat==2) {
jpbaillargeon 16:a163a7c0315b 224 if((t-prev_time)<=35 && (t-prev_time)>=20){
jpbaillargeon 16:a163a7c0315b 225 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 226 preambule[compteur] = f->front;
jpbaillargeon 16:a163a7c0315b 227 prev_time = t;
jpbaillargeon 16:a163a7c0315b 228 compteur++;
jpbaillargeon 16:a163a7c0315b 229 }
jpbaillargeon 16:a163a7c0315b 230 }
jpbaillargeon 16:a163a7c0315b 231
jpbaillargeon 16:a163a7c0315b 232 else if(etat ==3) {
jpbaillargeon 16:a163a7c0315b 233 if((t-prev_time)<=35 && (t-prev_time)>=20){
leomerel 15:872151771dec 234 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 235 start[compteur-8] = f->front;
jpbaillargeon 16:a163a7c0315b 236 prev_time = t;
jpbaillargeon 16:a163a7c0315b 237 compteur++;
leomerel 15:872151771dec 238 }
jpbaillargeon 16:a163a7c0315b 239 }
jpbaillargeon 16:a163a7c0315b 240
jpbaillargeon 16:a163a7c0315b 241 else if(etat ==4) {
jpbaillargeon 16:a163a7c0315b 242 if((t-prev_time)<=35 && (t-prev_time)>=20){
jpbaillargeon 16:a163a7c0315b 243 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 244 flag[compteur-16] = f->front;
jpbaillargeon 16:a163a7c0315b 245 prev_time = t;
jpbaillargeon 16:a163a7c0315b 246 compteur++;
jpbaillargeon 16:a163a7c0315b 247 }
jpbaillargeon 16:a163a7c0315b 248 }
jpbaillargeon 16:a163a7c0315b 249
jpbaillargeon 16:a163a7c0315b 250 else if(etat ==5) {
jpbaillargeon 16:a163a7c0315b 251 if((t-prev_time)<=35 && (t-prev_time)>=20){
leomerel 15:872151771dec 252 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 253 longueur[compteur-24] = f->front;
jpbaillargeon 16:a163a7c0315b 254 prev_time = t;
jpbaillargeon 16:a163a7c0315b 255 compteur++;
jpbaillargeon 16:a163a7c0315b 256 }
jpbaillargeon 16:a163a7c0315b 257 }
jpbaillargeon 16:a163a7c0315b 258 else if(etat ==6) {
jpbaillargeon 16:a163a7c0315b 259 if((t-prev_time)<=35 && (t-prev_time)>=20){
jpbaillargeon 16:a163a7c0315b 260 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 261 message[compteur-32]= f->front;
jpbaillargeon 16:a163a7c0315b 262 prev_time = t;
jpbaillargeon 16:a163a7c0315b 263 compteur++;
leomerel 15:872151771dec 264 }
jpbaillargeon 16:a163a7c0315b 265 }
jpbaillargeon 16:a163a7c0315b 266 else if(etat ==7) {
jpbaillargeon 16:a163a7c0315b 267 if((t-prev_time)<=35 && (t-prev_time)>=20){
jpbaillargeon 16:a163a7c0315b 268 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 269 checksum[compteur-32-longInt]= f->front;
jpbaillargeon 16:a163a7c0315b 270 prev_time = t;
jpbaillargeon 16:a163a7c0315b 271 compteur++;
jpbaillargeon 16:a163a7c0315b 272 }
jpbaillargeon 16:a163a7c0315b 273 }
jpbaillargeon 16:a163a7c0315b 274 else if(etat ==8) {
jpbaillargeon 16:a163a7c0315b 275 if((t-prev_time)<=35 && (t-prev_time)>=20){
jpbaillargeon 16:a163a7c0315b 276 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 277 end[compteur-40-longInt]= f->front;
jpbaillargeon 16:a163a7c0315b 278 prev_time = t;
jpbaillargeon 16:a163a7c0315b 279 compteur++;
jpbaillargeon 16:a163a7c0315b 280 }
jpbaillargeon 16:a163a7c0315b 281 }
leomerel 15:872151771dec 282 mail_box.free(f);
leomerel 15:872151771dec 283 }
jpbaillargeon 16:a163a7c0315b 284
leomerel 15:872151771dec 285 if(compteur ==8){
jpbaillargeon 16:a163a7c0315b 286 for(int i=0; i<8;i++){
jpbaillargeon 16:a163a7c0315b 287 if(preambule[i]!= PREAMBULE[i])
jpbaillargeon 16:a163a7c0315b 288 {
jpbaillargeon 16:a163a7c0315b 289 etat =0;
jpbaillargeon 16:a163a7c0315b 290 printf("------FAIL------\r\n");
leomerel 15:872151771dec 291 }
leomerel 15:872151771dec 292 printf("%d", preambule[i]);
leomerel 15:872151771dec 293 }
leomerel 15:872151771dec 294 printf("\r\n");
jpbaillargeon 16:a163a7c0315b 295 etat = 3;
jpbaillargeon 16:a163a7c0315b 296 printf("-----ETAT 3-----\r\n");
leomerel 15:872151771dec 297 }
jpbaillargeon 16:a163a7c0315b 298 else if(compteur ==16) {
jpbaillargeon 16:a163a7c0315b 299 for(int i=0; i<8;i++){
jpbaillargeon 16:a163a7c0315b 300 if(start[i]!= START_END[i])
jpbaillargeon 16:a163a7c0315b 301 {
jpbaillargeon 16:a163a7c0315b 302 etat =0;
jpbaillargeon 16:a163a7c0315b 303 printf("------FAIL------\r\n");
jpbaillargeon 16:a163a7c0315b 304 }
jpbaillargeon 16:a163a7c0315b 305 printf("%d", start[i]);
jpbaillargeon 16:a163a7c0315b 306 }
jpbaillargeon 16:a163a7c0315b 307 printf("\r\n");
jpbaillargeon 16:a163a7c0315b 308 etat =4;
jpbaillargeon 16:a163a7c0315b 309 printf("-----ETAT 4-----\r\n");
jpbaillargeon 16:a163a7c0315b 310 }
jpbaillargeon 16:a163a7c0315b 311 else if(compteur==24) {
jpbaillargeon 16:a163a7c0315b 312 for(int i=0; i<8;i++){
jpbaillargeon 16:a163a7c0315b 313 printf("%d", flag[i]);
jpbaillargeon 16:a163a7c0315b 314 }
jpbaillargeon 16:a163a7c0315b 315 printf("\r\n");
jpbaillargeon 16:a163a7c0315b 316 etat =5;
jpbaillargeon 16:a163a7c0315b 317 printf("-----ETAT 5 -----\r\n");
jpbaillargeon 16:a163a7c0315b 318 }
jpbaillargeon 16:a163a7c0315b 319 else if(compteur==32) {
jpbaillargeon 16:a163a7c0315b 320 longInt=0;
jpbaillargeon 16:a163a7c0315b 321 for(int i = 0; i<8; i++) {
jpbaillargeon 16:a163a7c0315b 322 longInt = longInt*2+longueur[i];
jpbaillargeon 16:a163a7c0315b 323 }
jpbaillargeon 16:a163a7c0315b 324 printf("%d\r\n", longInt);
jpbaillargeon 16:a163a7c0315b 325 etat =6;
jpbaillargeon 16:a163a7c0315b 326 printf("-----ETAT 6 -----\r\n");
jpbaillargeon 16:a163a7c0315b 327 }
jpbaillargeon 16:a163a7c0315b 328 else if(compteur==32+longInt) {
jpbaillargeon 16:a163a7c0315b 329 for(int i=0; i<longInt;i++){
jpbaillargeon 16:a163a7c0315b 330 printf("%d", message[i]);
jpbaillargeon 16:a163a7c0315b 331 }
jpbaillargeon 16:a163a7c0315b 332 printf("\r\n");
jpbaillargeon 16:a163a7c0315b 333 etat =7;
jpbaillargeon 16:a163a7c0315b 334 printf("-----ETAT 7-----\r\n");
jpbaillargeon 16:a163a7c0315b 335 }
jpbaillargeon 16:a163a7c0315b 336
jpbaillargeon 16:a163a7c0315b 337 else if(compteur == 40 +longInt) {
jpbaillargeon 16:a163a7c0315b 338 unsigned short crc = crc16(message, (int)sizeof(message));
jpbaillargeon 16:a163a7c0315b 339 printf("/r/n -----------------%d-------------/r/n", crc);
jpbaillargeon 16:a163a7c0315b 340 int_to_bin(checksum, crc);
jpbaillargeon 16:a163a7c0315b 341 for(int i=0; i<8;i++){
jpbaillargeon 16:a163a7c0315b 342 printf("%d", checksum[i]);
jpbaillargeon 16:a163a7c0315b 343 /*if(bin[i] != checksum[i]) {
jpbaillargeon 16:a163a7c0315b 344 etat =0;
jpbaillargeon 16:a163a7c0315b 345 printf("------FAIL------\r\n");
jpbaillargeon 16:a163a7c0315b 346 } */
jpbaillargeon 16:a163a7c0315b 347 }
jpbaillargeon 16:a163a7c0315b 348
jpbaillargeon 16:a163a7c0315b 349 printf("\r\n");
jpbaillargeon 16:a163a7c0315b 350 etat =8;
jpbaillargeon 16:a163a7c0315b 351 printf("-----ETAT 8-----\r\n");
jpbaillargeon 16:a163a7c0315b 352 }
jpbaillargeon 16:a163a7c0315b 353 else if(compteur == 48 +longInt) {
jpbaillargeon 16:a163a7c0315b 354 for(int i=0; i<8;i++){
jpbaillargeon 16:a163a7c0315b 355 if(end[i]!= START_END[i])
jpbaillargeon 16:a163a7c0315b 356 {
jpbaillargeon 16:a163a7c0315b 357 etat =0;
jpbaillargeon 16:a163a7c0315b 358 printf("------FAIL------\r\n");
jpbaillargeon 16:a163a7c0315b 359 }
jpbaillargeon 16:a163a7c0315b 360 printf("%d", end[i]);
jpbaillargeon 16:a163a7c0315b 361 }
jpbaillargeon 16:a163a7c0315b 362 printf("\r\n");
jpbaillargeon 16:a163a7c0315b 363 etat =0;
jpbaillargeon 16:a163a7c0315b 364 printf("-----ETAT 0-----\r\n");
jpbaillargeon 16:a163a7c0315b 365 }
leomerel 14:42a7d108b134 366 }
leomerel 14:42a7d108b134 367 }
leomerel 14:42a7d108b134 368
leomerel 12:cfa3dec9e9a3 369 //reception des trames
leomerel 14:42a7d108b134 370 void receptionTrames(){
leomerel 14:42a7d108b134 371 }
leomerel 14:42a7d108b134 372
leomerel 14:42a7d108b134 373 //decode Manchester ------------------------------------------------------------------------------------------------------------------
leomerel 14:42a7d108b134 374 void decodeManchester(bool *data){
leomerel 14:42a7d108b134 375
leomerel 14:42a7d108b134 376 }
leomerel 14:42a7d108b134 377
leomerel 14:42a7d108b134 378
leomerel 14:42a7d108b134 379
leomerel 12:cfa3dec9e9a3 380 //assemblage des trames
leomerel 12:cfa3dec9e9a3 381 //desassemblage des trames
leomerel 12:cfa3dec9e9a3 382
leomerel 12:cfa3dec9e9a3 383
leomerel 15:872151771dec 384 void rise() {
leomerel 15:872151771dec 385 led1 = !led1;
leomerel 14:42a7d108b134 386 //printf("\r\n C'est bon \r\n");
leomerel 15:872151771dec 387 message_t *a = mail_box.alloc();
leomerel 15:872151771dec 388 a->time = timer.read_ms();;
leomerel 15:872151771dec 389 a->front = 0;
leomerel 15:872151771dec 390 mail_box.put(a);
leomerel 15:872151771dec 391 }
leomerel 15:872151771dec 392
leomerel 15:872151771dec 393 void fall() {
leomerel 15:872151771dec 394 led2 = !led2;
leomerel 15:872151771dec 395 //printf("\r\n C'est bon \r\n");
leomerel 15:872151771dec 396 message_t *a = mail_box.alloc();
leomerel 15:872151771dec 397 a->time = timer.read_ms();;
leomerel 15:872151771dec 398 a->front = 1;
leomerel 15:872151771dec 399 mail_box.put(a);
leomerel 14:42a7d108b134 400 }
leomerel 14:42a7d108b134 401
leomerel 14:42a7d108b134 402
emilmont 1:491820ee784d 403 int main() {
leomerel 14:42a7d108b134 404 /*while(1) {
leomerel 12:cfa3dec9e9a3 405 for(int i=0; i<sizeof(message); i++){
leomerel 12:cfa3dec9e9a3 406 convertToManchester(message[i]);
leomerel 12:cfa3dec9e9a3 407 printf("OK\r\n");
leomerel 12:cfa3dec9e9a3 408 }
leomerel 14:42a7d108b134 409 wait(1);*/
leomerel 14:42a7d108b134 410 /*int length = sizeof(message);
leomerel 14:42a7d108b134 411 printf("%d \r\n", length);
leomerel 14:42a7d108b134 412 printf("Binary length : ");
leomerel 14:42a7d108b134 413 for(int i=0; i<8; i++){
leomerel 14:42a7d108b134 414 printf("%d",bin[i]);
leomerel 14:42a7d108b134 415 }
leomerel 14:42a7d108b134 416 printf("\r\n");*/
leomerel 14:42a7d108b134 417
leomerel 14:42a7d108b134 418 int length = sizeof(messageUtile);
leomerel 14:42a7d108b134 419 bool message[length+6*8];
leomerel 14:42a7d108b134 420 creationTrame(message,length);
leomerel 14:42a7d108b134 421 printf("Message : ");
leomerel 14:42a7d108b134 422 for(int i=0; i<sizeof(message); i++){
leomerel 14:42a7d108b134 423 if(i>0 && i%8 == 0){
leomerel 14:42a7d108b134 424 printf(" ");
leomerel 14:42a7d108b134 425 }
leomerel 14:42a7d108b134 426 printf("%d",message[i]);
leomerel 14:42a7d108b134 427 }
leomerel 14:42a7d108b134 428 printf("\r\n");
leomerel 14:42a7d108b134 429
leomerel 14:42a7d108b134 430
leomerel 14:42a7d108b134 431 bool manchester[16];
leomerel 14:42a7d108b134 432 bool byte[8] = {0,1,0,0,1,1,1,0};
leomerel 14:42a7d108b134 433 convertByteToManchester(manchester,byte);
leomerel 14:42a7d108b134 434 printf("Manchester : ");
leomerel 14:42a7d108b134 435 for(int i=0; i<16; i++){
leomerel 14:42a7d108b134 436 if(i>0 && i%2 == 0){
leomerel 14:42a7d108b134 437 printf(" ");
leomerel 14:42a7d108b134 438 }
leomerel 14:42a7d108b134 439 printf("%d",manchester[i]);
leomerel 14:42a7d108b134 440 }
leomerel 14:42a7d108b134 441 printf("\r\n");
leomerel 14:42a7d108b134 442
leomerel 14:42a7d108b134 443 int length2 = sizeof(messageUtile);
leomerel 14:42a7d108b134 444 bool message2[length2+6*8];
leomerel 14:42a7d108b134 445 bool manchester2[(length2+6*8)*2];
leomerel 14:42a7d108b134 446 creationTrame(message2,length2);
leomerel 14:42a7d108b134 447 convertMessageToManchester(manchester2, message2, length2+6*8);
leomerel 14:42a7d108b134 448 printf("Message : \r\n");
leomerel 14:42a7d108b134 449 for(int i=0; i<sizeof(manchester2); i++){
leomerel 14:42a7d108b134 450 if(i>0 && i%16 == 0){
leomerel 14:42a7d108b134 451 printf("\r\n");
leomerel 14:42a7d108b134 452 }
leomerel 14:42a7d108b134 453 if(i>0 && i%2 == 0){
leomerel 14:42a7d108b134 454 printf(" ");
leomerel 14:42a7d108b134 455 }
leomerel 14:42a7d108b134 456 printf("%d",manchester2[i]);
leomerel 14:42a7d108b134 457 }
leomerel 14:42a7d108b134 458 printf("\r\n");
leomerel 14:42a7d108b134 459
leomerel 15:872151771dec 460
leomerel 15:872151771dec 461
leomerel 14:42a7d108b134 462 envoi_t.start(envoiTrame);
leomerel 14:42a7d108b134 463 reception_t.start(receptionTrames);
leomerel 15:872151771dec 464 detection_t.start(detectionPreambule);
leomerel 15:872151771dec 465 button.rise(&rise); // attach the address of the flip function to the rising edge
leomerel 15:872151771dec 466 button.fall(&fall);
leomerel 14:42a7d108b134 467 while(1) { // wait around, interrupts will interrupt this!
leomerel 14:42a7d108b134 468 flash = !flash;
leomerel 14:42a7d108b134 469 wait(0.25);
leomerel 14:42a7d108b134 470 }
emilmont 1:491820ee784d 471 }
jpbaillargeon 16:a163a7c0315b 472