APP4

Dependencies:   mbed-rtos mbed

Fork of rtos_basic by mbed official

Committer:
jpbaillargeon
Date:
Tue Oct 23 15:39:47 2018 +0000
Revision:
19:ae8e7c9292d6
Parent:
18:5c26a8f38248
Child:
20:b45474290281
99.9% fonctionnel (domingo va y voir que du feu)

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
jpbaillargeon 19:ae8e7c9292d6 12 int periode = 40; //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;
jpbaillargeon 19:ae8e7c9292d6 28 const int longMessage = 64;
jpbaillargeon 19:ae8e7c9292d6 29 bool messageUtile[longMessage] = {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 19:ae8e7c9292d6 55 while(length >0 || i<8){
jpbaillargeon 19:ae8e7c9292d6 56 r = length%2;
jpbaillargeon 19:ae8e7c9292d6 57 length/=2;
jpbaillargeon 19:ae8e7c9292d6 58 bin[7-i]=r;
jpbaillargeon 19:ae8e7c9292d6 59 i++;
jpbaillargeon 19:ae8e7c9292d6 60 }
jpbaillargeon 19:ae8e7c9292d6 61 while(i<8){
jpbaillargeon 19:ae8e7c9292d6 62 bin[i]=0;
jpbaillargeon 19:ae8e7c9292d6 63 i++;
jpbaillargeon 19:ae8e7c9292d6 64 }
jpbaillargeon 19:ae8e7c9292d6 65 }
jpbaillargeon 19:ae8e7c9292d6 66
jpbaillargeon 19:ae8e7c9292d6 67 void int_to_bin2(bool bin[8], int length){ //Fonctionne
jpbaillargeon 19:ae8e7c9292d6 68 int i = 0;
jpbaillargeon 17:53d4674cb37f 69 while(length >0 && i<8){
leomerel 14:42a7d108b134 70 r = length%2;
leomerel 14:42a7d108b134 71 length/=2;
leomerel 14:42a7d108b134 72 bin[7-i]=r;
leomerel 14:42a7d108b134 73 i++;
leomerel 14:42a7d108b134 74 }
leomerel 14:42a7d108b134 75 while(i<8){
leomerel 14:42a7d108b134 76 bin[i]=0;
leomerel 14:42a7d108b134 77 i++;
leomerel 14:42a7d108b134 78 }
leomerel 14:42a7d108b134 79 }
leomerel 14:42a7d108b134 80
leomerel 14:42a7d108b134 81 //convert to Manchester ------------------------------------------------------------------------------------------------
leomerel 14:42a7d108b134 82 void convertBitToManchester(bool *manchester, bool bit){ //Fonctionne
leomerel 14:42a7d108b134 83 if(bit == 0){
leomerel 14:42a7d108b134 84 manchester[0]=0;
leomerel 14:42a7d108b134 85 manchester[1]=1;
leomerel 12:cfa3dec9e9a3 86 }
leomerel 14:42a7d108b134 87 else if(bit == 1){
leomerel 14:42a7d108b134 88 manchester[0]=1;
leomerel 14:42a7d108b134 89 manchester[1]=0;
emilmont 1:491820ee784d 90 }
emilmont 1:491820ee784d 91 }
leomerel 12:cfa3dec9e9a3 92
leomerel 14:42a7d108b134 93 void convertByteToManchester(bool *manchester, bool byte[8]){ //Fonctionne
leomerel 14:42a7d108b134 94 for(int i=0; i<8; i++){
leomerel 14:42a7d108b134 95 if(byte[i] == 0){
leomerel 14:42a7d108b134 96 manchester[i*2]=0;
leomerel 14:42a7d108b134 97 manchester[i*2+1]=1;
leomerel 14:42a7d108b134 98 }
leomerel 14:42a7d108b134 99 else if(byte[i] == 1){
leomerel 14:42a7d108b134 100 manchester[i*2]=1;
leomerel 14:42a7d108b134 101 manchester[i*2+1]=0;
leomerel 14:42a7d108b134 102 }
leomerel 14:42a7d108b134 103 }
leomerel 14:42a7d108b134 104 }
leomerel 12:cfa3dec9e9a3 105
leomerel 14:42a7d108b134 106 void convertMessageToManchester(bool *manchester, bool *message, int length){
leomerel 14:42a7d108b134 107 for(int i=0; i<length; i++){
leomerel 14:42a7d108b134 108 if(message[i] == 0){
leomerel 14:42a7d108b134 109 manchester[i*2]=0;
leomerel 14:42a7d108b134 110 manchester[i*2+1]=1;
leomerel 14:42a7d108b134 111 }
leomerel 14:42a7d108b134 112 else if(message[i] == 1){
leomerel 14:42a7d108b134 113 manchester[i*2]=1;
leomerel 14:42a7d108b134 114 manchester[i*2+1]=0;
leomerel 14:42a7d108b134 115 }
leomerel 14:42a7d108b134 116 }
leomerel 12:cfa3dec9e9a3 117 }
leomerel 12:cfa3dec9e9a3 118
leomerel 14:42a7d108b134 119 //création d'une trame --------------------------------------------------------------------------------------------------------------
leomerel 14:42a7d108b134 120 void creationTrame(bool *message, int length){ //Fonctionne
leomerel 14:42a7d108b134 121 bool bin[8];
leomerel 14:42a7d108b134 122 int_to_bin(bin, length);
leomerel 14:42a7d108b134 123 for(int i=0; i<8; i++){
leomerel 14:42a7d108b134 124 *message=PREAMBULE[i];
leomerel 14:42a7d108b134 125 message++;
leomerel 14:42a7d108b134 126 }
leomerel 14:42a7d108b134 127 for(int i=0; i<8; i++){
leomerel 14:42a7d108b134 128 *message=START_END[i];
leomerel 14:42a7d108b134 129 message++;
leomerel 14:42a7d108b134 130 }
leomerel 14:42a7d108b134 131 for(int i=0; i<8; i++){
leomerel 14:42a7d108b134 132 *message=0;
leomerel 14:42a7d108b134 133 message++;
leomerel 14:42a7d108b134 134 }
leomerel 14:42a7d108b134 135 for(int i=0; i<8; i++){
leomerel 14:42a7d108b134 136 *message=bin[i];
leomerel 14:42a7d108b134 137 message++;
leomerel 14:42a7d108b134 138 }
leomerel 14:42a7d108b134 139 for(int i=0; i<sizeof(messageUtile); i++){
leomerel 14:42a7d108b134 140 *message=messageUtile[i];
leomerel 14:42a7d108b134 141 message++;
leomerel 14:42a7d108b134 142 }
leomerel 14:42a7d108b134 143 //CRC16
jpbaillargeon 16:a163a7c0315b 144 unsigned short crc = crc16(messageUtile, (int)sizeof(messageUtile));
jpbaillargeon 19:ae8e7c9292d6 145 printf("\r\n -----------------CRC ENVOYE: %d-------------\r\n", crc);
jpbaillargeon 19:ae8e7c9292d6 146 int_to_bin2(bin, crc);
leomerel 14:42a7d108b134 147 for(int i=0; i<8; i++){
jpbaillargeon 16:a163a7c0315b 148 *message=bin[i];
jpbaillargeon 16:a163a7c0315b 149 message++;
leomerel 14:42a7d108b134 150 }
leomerel 14:42a7d108b134 151 for(int i=0; i<8; i++){
leomerel 14:42a7d108b134 152 *message=START_END[i];
leomerel 14:42a7d108b134 153 message++;
leomerel 14:42a7d108b134 154 }
leomerel 14:42a7d108b134 155 }
leomerel 14:42a7d108b134 156
leomerel 14:42a7d108b134 157 //Envoi d'une trame ----------------------------------------------------------------------------------------------------------------
leomerel 14:42a7d108b134 158 void envoiTrame(){
leomerel 15:872151771dec 159 bool app=false;
jpbaillargeon 16:a163a7c0315b 160 int length3 = sizeof(messageUtile);
jpbaillargeon 16:a163a7c0315b 161 bool message3[length3+6*8];
jpbaillargeon 16:a163a7c0315b 162 bool manchester3[(length3+6*8)*2];
jpbaillargeon 16:a163a7c0315b 163
jpbaillargeon 16:a163a7c0315b 164 creationTrame(message3,length3);
jpbaillargeon 16:a163a7c0315b 165 convertMessageToManchester(manchester3, message3,length3+6*8);
leomerel 15:872151771dec 166 while(1){
leomerel 15:872151771dec 167 if(pin12 && !app){
leomerel 15:872151771dec 168 app=true;
leomerel 15:872151771dec 169 for(int i=0; i<sizeof(manchester3); i++){
leomerel 15:872151771dec 170 dout = manchester3[i];
leomerel 15:872151771dec 171 Thread::wait(periode);
leomerel 15:872151771dec 172 }
leomerel 15:872151771dec 173 }
leomerel 15:872151771dec 174 else if(!pin12 && app){
leomerel 15:872151771dec 175 app=false;
leomerel 15:872151771dec 176 }
leomerel 14:42a7d108b134 177 }
leomerel 14:42a7d108b134 178 }
leomerel 14:42a7d108b134 179
jpbaillargeon 16:a163a7c0315b 180
leomerel 14:42a7d108b134 181
leomerel 14:42a7d108b134 182
jpbaillargeon 19:ae8e7c9292d6 183 //Réception des trames
jpbaillargeon 19:ae8e7c9292d6 184 void receptionTrames() {
leomerel 15:872151771dec 185 int compteur = 0;
leomerel 15:872151771dec 186 int prev_time;
leomerel 15:872151771dec 187 int t;
jpbaillargeon 16:a163a7c0315b 188 bool preambule[8];
jpbaillargeon 16:a163a7c0315b 189 bool start[8];
jpbaillargeon 16:a163a7c0315b 190 bool flag[8];
jpbaillargeon 16:a163a7c0315b 191 bool longueur[8];
jpbaillargeon 16:a163a7c0315b 192 bool message[64];
jpbaillargeon 16:a163a7c0315b 193 bool checksum[8];
jpbaillargeon 16:a163a7c0315b 194 bool end[8];
jpbaillargeon 16:a163a7c0315b 195 int longInt;
jpbaillargeon 16:a163a7c0315b 196 bool bin2[8];
jpbaillargeon 18:5c26a8f38248 197 int temps =0;
jpbaillargeon 18:5c26a8f38248 198 int tMax;
jpbaillargeon 18:5c26a8f38248 199 int tMin;
leomerel 14:42a7d108b134 200 while(1){
leomerel 15:872151771dec 201 osEvent evt = mail_box.get();
leomerel 15:872151771dec 202 if (evt.status == osEventMail) {
leomerel 15:872151771dec 203 message_t *f = (message_t*)evt.value.p;
leomerel 15:872151771dec 204 led3 = f->front;
leomerel 15:872151771dec 205 t = f->time;
jpbaillargeon 16:a163a7c0315b 206 if(etat==0) {
jpbaillargeon 16:a163a7c0315b 207 if(f->front == 0){
leomerel 15:872151771dec 208 compteur=0;
leomerel 15:872151771dec 209 timer.start();
leomerel 15:872151771dec 210 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
leomerel 15:872151771dec 211 preambule[compteur] = f->front;
jpbaillargeon 16:a163a7c0315b 212 prev_time = t;
jpbaillargeon 16:a163a7c0315b 213 compteur++;
leomerel 15:872151771dec 214 etat = 1;
jpbaillargeon 16:a163a7c0315b 215 printf("-----ETAT 1-----\r\n");
leomerel 15:872151771dec 216 }
jpbaillargeon 16:a163a7c0315b 217 }
jpbaillargeon 16:a163a7c0315b 218
jpbaillargeon 16:a163a7c0315b 219 else if(etat==1) {
jpbaillargeon 16:a163a7c0315b 220 if(f->front==1){
leomerel 15:872151771dec 221 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
leomerel 15:872151771dec 222 preambule[compteur] = f->front;
jpbaillargeon 16:a163a7c0315b 223 prev_time = t;
jpbaillargeon 16:a163a7c0315b 224 compteur++;
jpbaillargeon 16:a163a7c0315b 225 etat = 2;
jpbaillargeon 16:a163a7c0315b 226 printf("-----ETAT 2-----\r\n");
leomerel 15:872151771dec 227 }
leomerel 15:872151771dec 228 }
jpbaillargeon 16:a163a7c0315b 229
jpbaillargeon 16:a163a7c0315b 230 else if(etat==2) {
jpbaillargeon 16:a163a7c0315b 231 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 232 preambule[compteur] = f->front;
jpbaillargeon 18:5c26a8f38248 233 temps += t-prev_time;
jpbaillargeon 16:a163a7c0315b 234 prev_time = t;
jpbaillargeon 16:a163a7c0315b 235 compteur++;
jpbaillargeon 16:a163a7c0315b 236 }
jpbaillargeon 16:a163a7c0315b 237
jpbaillargeon 16:a163a7c0315b 238 else if(etat ==3) {
jpbaillargeon 19:ae8e7c9292d6 239 if(((t-prev_time)<=tMax)&& ((t-prev_time)>=tMin)){
leomerel 15:872151771dec 240 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 241 start[compteur-8] = f->front;
jpbaillargeon 16:a163a7c0315b 242 prev_time = t;
jpbaillargeon 16:a163a7c0315b 243 compteur++;
leomerel 15:872151771dec 244 }
jpbaillargeon 16:a163a7c0315b 245 }
jpbaillargeon 16:a163a7c0315b 246
jpbaillargeon 16:a163a7c0315b 247 else if(etat ==4) {
jpbaillargeon 19:ae8e7c9292d6 248 if(((t-prev_time)<=tMax)&& ((t-prev_time)>=tMin)){
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 19:ae8e7c9292d6 257 if(((t-prev_time)<=tMax)&& ((t-prev_time)>=tMin)){
leomerel 15:872151771dec 258 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 259 longueur[compteur-24] = f->front;
jpbaillargeon 16:a163a7c0315b 260 prev_time = t;
jpbaillargeon 16:a163a7c0315b 261 compteur++;
jpbaillargeon 16:a163a7c0315b 262 }
jpbaillargeon 16:a163a7c0315b 263 }
jpbaillargeon 16:a163a7c0315b 264 else if(etat ==6) {
jpbaillargeon 19:ae8e7c9292d6 265 if(((t-prev_time)<=tMax)&& ((t-prev_time)>=tMin)){
jpbaillargeon 16:a163a7c0315b 266 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 267 message[compteur-32]= f->front;
jpbaillargeon 16:a163a7c0315b 268 prev_time = t;
jpbaillargeon 16:a163a7c0315b 269 compteur++;
leomerel 15:872151771dec 270 }
jpbaillargeon 16:a163a7c0315b 271 }
jpbaillargeon 16:a163a7c0315b 272 else if(etat ==7) {
jpbaillargeon 19:ae8e7c9292d6 273 if(((t-prev_time)<=tMax)&& ((t-prev_time)>=tMin)){
jpbaillargeon 16:a163a7c0315b 274 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 275 checksum[compteur-32-longInt]= f->front;
jpbaillargeon 16:a163a7c0315b 276 prev_time = t;
jpbaillargeon 16:a163a7c0315b 277 compteur++;
jpbaillargeon 16:a163a7c0315b 278 }
jpbaillargeon 16:a163a7c0315b 279 }
jpbaillargeon 16:a163a7c0315b 280 else if(etat ==8) {
jpbaillargeon 19:ae8e7c9292d6 281 if(((t-prev_time)<=tMax)&& ((t-prev_time)>=tMin)){
jpbaillargeon 16:a163a7c0315b 282 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 283 end[compteur-40-longInt]= f->front;
jpbaillargeon 16:a163a7c0315b 284 prev_time = t;
jpbaillargeon 16:a163a7c0315b 285 compteur++;
jpbaillargeon 16:a163a7c0315b 286 }
jpbaillargeon 16:a163a7c0315b 287 }
leomerel 15:872151771dec 288 mail_box.free(f);
leomerel 15:872151771dec 289 }
jpbaillargeon 16:a163a7c0315b 290
jpbaillargeon 17:53d4674cb37f 291 if((compteur ==8) && (etat ==2)){
jpbaillargeon 17:53d4674cb37f 292 etat = 3;
jpbaillargeon 16:a163a7c0315b 293 for(int i=0; i<8;i++){
jpbaillargeon 17:53d4674cb37f 294 if((preambule[i]!= PREAMBULE[i]) && (etat !=0 ))
jpbaillargeon 16:a163a7c0315b 295 {
jpbaillargeon 16:a163a7c0315b 296 etat =0;
jpbaillargeon 17:53d4674cb37f 297 printf("\r\n------Pas le bon PREAMBULE------\r\n");
leomerel 15:872151771dec 298 }
leomerel 15:872151771dec 299 printf("%d", preambule[i]);
leomerel 15:872151771dec 300 }
leomerel 15:872151771dec 301 printf("\r\n");
jpbaillargeon 17:53d4674cb37f 302 if(etat != 0)
jpbaillargeon 17:53d4674cb37f 303 {
jpbaillargeon 18:5c26a8f38248 304 temps /=6;
jpbaillargeon 19:ae8e7c9292d6 305 tMin = 0.75*temps;
jpbaillargeon 19:ae8e7c9292d6 306 tMax = 1.25*temps;
jpbaillargeon 18:5c26a8f38248 307 printf("-----ETAT 3 %d-----\r\n", temps);
jpbaillargeon 17:53d4674cb37f 308 }
leomerel 15:872151771dec 309 }
jpbaillargeon 17:53d4674cb37f 310 else if((compteur ==16) && (etat == 3)) {
jpbaillargeon 17:53d4674cb37f 311 etat =4;
jpbaillargeon 16:a163a7c0315b 312 for(int i=0; i<8;i++){
jpbaillargeon 17:53d4674cb37f 313 if((start[i]!= START_END[i]) && (etat != 0))
jpbaillargeon 16:a163a7c0315b 314 {
jpbaillargeon 16:a163a7c0315b 315 etat =0;
jpbaillargeon 17:53d4674cb37f 316 printf("\r\n------Pas le bon START------\r\n");
jpbaillargeon 16:a163a7c0315b 317 }
jpbaillargeon 16:a163a7c0315b 318 printf("%d", start[i]);
jpbaillargeon 16:a163a7c0315b 319 }
jpbaillargeon 16:a163a7c0315b 320 printf("\r\n");
jpbaillargeon 17:53d4674cb37f 321 if(etat != 0)
jpbaillargeon 17:53d4674cb37f 322 {
jpbaillargeon 17:53d4674cb37f 323 printf("-----ETAT 4-----\r\n");
jpbaillargeon 17:53d4674cb37f 324 }
jpbaillargeon 16:a163a7c0315b 325 }
jpbaillargeon 17:53d4674cb37f 326 else if((compteur==24) && (etat ==4)) {
jpbaillargeon 16:a163a7c0315b 327 for(int i=0; i<8;i++){
jpbaillargeon 16:a163a7c0315b 328 printf("%d", flag[i]);
jpbaillargeon 16:a163a7c0315b 329 }
jpbaillargeon 16:a163a7c0315b 330 printf("\r\n");
jpbaillargeon 16:a163a7c0315b 331 etat =5;
jpbaillargeon 16:a163a7c0315b 332 printf("-----ETAT 5 -----\r\n");
jpbaillargeon 16:a163a7c0315b 333 }
jpbaillargeon 17:53d4674cb37f 334 else if((compteur==32) && (etat ==5)) {
jpbaillargeon 16:a163a7c0315b 335 longInt=0;
jpbaillargeon 16:a163a7c0315b 336 for(int i = 0; i<8; i++) {
jpbaillargeon 16:a163a7c0315b 337 longInt = longInt*2+longueur[i];
jpbaillargeon 16:a163a7c0315b 338 }
jpbaillargeon 16:a163a7c0315b 339 printf("%d\r\n", longInt);
jpbaillargeon 16:a163a7c0315b 340 etat =6;
jpbaillargeon 16:a163a7c0315b 341 printf("-----ETAT 6 -----\r\n");
jpbaillargeon 16:a163a7c0315b 342 }
jpbaillargeon 17:53d4674cb37f 343 else if((compteur==32+longInt) && (etat ==6)) {
jpbaillargeon 16:a163a7c0315b 344 for(int i=0; i<longInt;i++){
jpbaillargeon 16:a163a7c0315b 345 printf("%d", message[i]);
jpbaillargeon 16:a163a7c0315b 346 }
jpbaillargeon 16:a163a7c0315b 347 printf("\r\n");
jpbaillargeon 16:a163a7c0315b 348 etat =7;
jpbaillargeon 16:a163a7c0315b 349 printf("-----ETAT 7-----\r\n");
jpbaillargeon 16:a163a7c0315b 350 }
jpbaillargeon 16:a163a7c0315b 351
jpbaillargeon 17:53d4674cb37f 352 else if((compteur == 40 +longInt) && (etat ==7)) {
jpbaillargeon 17:53d4674cb37f 353 etat =8;
jpbaillargeon 16:a163a7c0315b 354 unsigned short crc = crc16(message, (int)sizeof(message));
jpbaillargeon 19:ae8e7c9292d6 355 printf("\r\n -----------------CRC RECALCULE: %d-------------\r\n", crc);
jpbaillargeon 19:ae8e7c9292d6 356 int_to_bin2(bin2, crc);
jpbaillargeon 16:a163a7c0315b 357 for(int i=0; i<8;i++){
jpbaillargeon 17:53d4674cb37f 358 printf("%d", bin2[i]);
jpbaillargeon 17:53d4674cb37f 359 if((bin2[i] != checksum[i]) && (etat !=0)) {
jpbaillargeon 16:a163a7c0315b 360 etat =0;
jpbaillargeon 17:53d4674cb37f 361 printf("\r\n------Pas le bon CRC------\r\n");
jpbaillargeon 17:53d4674cb37f 362 }
jpbaillargeon 16:a163a7c0315b 363 }
jpbaillargeon 16:a163a7c0315b 364
jpbaillargeon 16:a163a7c0315b 365 printf("\r\n");
jpbaillargeon 17:53d4674cb37f 366 if(etat != 0)
jpbaillargeon 17:53d4674cb37f 367 {
jpbaillargeon 17:53d4674cb37f 368 printf("-----ETAT 8-----\r\n");
jpbaillargeon 17:53d4674cb37f 369 }
jpbaillargeon 16:a163a7c0315b 370 }
jpbaillargeon 17:53d4674cb37f 371 else if((compteur == 48 +longInt) && (etat ==8)) {
jpbaillargeon 16:a163a7c0315b 372 for(int i=0; i<8;i++){
jpbaillargeon 16:a163a7c0315b 373 if(end[i]!= START_END[i])
jpbaillargeon 16:a163a7c0315b 374 {
jpbaillargeon 16:a163a7c0315b 375 etat =0;
jpbaillargeon 17:53d4674cb37f 376 printf("\r\n------Pas le bon END------\r\n");
jpbaillargeon 16:a163a7c0315b 377 }
jpbaillargeon 16:a163a7c0315b 378 printf("%d", end[i]);
jpbaillargeon 16:a163a7c0315b 379 }
jpbaillargeon 16:a163a7c0315b 380 printf("\r\n");
jpbaillargeon 16:a163a7c0315b 381 etat =0;
jpbaillargeon 16:a163a7c0315b 382 printf("-----ETAT 0-----\r\n");
jpbaillargeon 16:a163a7c0315b 383 }
leomerel 14:42a7d108b134 384 }
leomerel 14:42a7d108b134 385 }
leomerel 14:42a7d108b134 386
leomerel 15:872151771dec 387 void rise() {
leomerel 15:872151771dec 388 led1 = !led1;
leomerel 15:872151771dec 389 message_t *a = mail_box.alloc();
leomerel 15:872151771dec 390 a->time = timer.read_ms();;
leomerel 15:872151771dec 391 a->front = 0;
leomerel 15:872151771dec 392 mail_box.put(a);
leomerel 15:872151771dec 393 }
leomerel 15:872151771dec 394
leomerel 15:872151771dec 395 void fall() {
leomerel 15:872151771dec 396 led2 = !led2;
leomerel 15:872151771dec 397 message_t *a = mail_box.alloc();
leomerel 15:872151771dec 398 a->time = timer.read_ms();;
leomerel 15:872151771dec 399 a->front = 1;
leomerel 15:872151771dec 400 mail_box.put(a);
leomerel 14:42a7d108b134 401 }
leomerel 14:42a7d108b134 402
leomerel 14:42a7d108b134 403
emilmont 1:491820ee784d 404 int main() {
jpbaillargeon 19:ae8e7c9292d6 405 printf("\r\n\r\n**********Debut**********\r\n");
leomerel 14:42a7d108b134 406 int length = sizeof(messageUtile);
leomerel 14:42a7d108b134 407 bool message[length+6*8];
jpbaillargeon 19:ae8e7c9292d6 408 bool manchester[(length+6*8)*2];
leomerel 14:42a7d108b134 409 creationTrame(message,length);
jpbaillargeon 19:ae8e7c9292d6 410 printf("\r\nMessage : \r\n");
leomerel 14:42a7d108b134 411 for(int i=0; i<sizeof(message); i++){
leomerel 14:42a7d108b134 412 if(i>0 && i%8 == 0){
leomerel 14:42a7d108b134 413 printf(" ");
leomerel 14:42a7d108b134 414 }
leomerel 14:42a7d108b134 415 printf("%d",message[i]);
leomerel 14:42a7d108b134 416 }
leomerel 14:42a7d108b134 417 printf("\r\n");
jpbaillargeon 19:ae8e7c9292d6 418 convertMessageToManchester(manchester, message, length+6*8);
jpbaillargeon 19:ae8e7c9292d6 419 printf("\r\nMessage Manchester: \r\n");
jpbaillargeon 19:ae8e7c9292d6 420 for(int i=0; i<sizeof(manchester); i++){
jpbaillargeon 19:ae8e7c9292d6 421 if(i>0 && i%16 == 0){
jpbaillargeon 19:ae8e7c9292d6 422 printf("\r\n");
jpbaillargeon 19:ae8e7c9292d6 423 }
leomerel 14:42a7d108b134 424 if(i>0 && i%2 == 0){
leomerel 14:42a7d108b134 425 printf(" ");
leomerel 14:42a7d108b134 426 }
leomerel 14:42a7d108b134 427 printf("%d",manchester[i]);
leomerel 14:42a7d108b134 428 }
leomerel 14:42a7d108b134 429 printf("\r\n");
leomerel 14:42a7d108b134 430
leomerel 15:872151771dec 431
leomerel 15:872151771dec 432
leomerel 14:42a7d108b134 433 envoi_t.start(envoiTrame);
leomerel 14:42a7d108b134 434 reception_t.start(receptionTrames);
leomerel 15:872151771dec 435 button.rise(&rise); // attach the address of the flip function to the rising edge
leomerel 15:872151771dec 436 button.fall(&fall);
leomerel 14:42a7d108b134 437 while(1) { // wait around, interrupts will interrupt this!
leomerel 14:42a7d108b134 438 flash = !flash;
leomerel 14:42a7d108b134 439 wait(0.25);
leomerel 14:42a7d108b134 440 }
emilmont 1:491820ee784d 441 }
jpbaillargeon 16:a163a7c0315b 442