APP4

Dependencies:   mbed-rtos mbed

Fork of rtos_basic by mbed official

Committer:
jpbaillargeon
Date:
Tue Oct 23 16:26:07 2018 +0000
Revision:
20:b45474290281
Parent:
19:ae8e7c9292d6
Child:
21:846e642eb63e
99.999999%

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 20:b45474290281 12 int periode = 1; //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 20:b45474290281 25 Mail<message_t,128> 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
jpbaillargeon 19:ae8e7c9292d6 181 //Réception des trames
jpbaillargeon 19:ae8e7c9292d6 182 void receptionTrames() {
leomerel 15:872151771dec 183 int compteur = 0;
leomerel 15:872151771dec 184 int prev_time;
leomerel 15:872151771dec 185 int t;
jpbaillargeon 16:a163a7c0315b 186 bool preambule[8];
jpbaillargeon 16:a163a7c0315b 187 bool start[8];
jpbaillargeon 16:a163a7c0315b 188 bool flag[8];
jpbaillargeon 16:a163a7c0315b 189 bool longueur[8];
jpbaillargeon 16:a163a7c0315b 190 bool message[64];
jpbaillargeon 16:a163a7c0315b 191 bool checksum[8];
jpbaillargeon 16:a163a7c0315b 192 bool end[8];
jpbaillargeon 16:a163a7c0315b 193 int longInt;
jpbaillargeon 16:a163a7c0315b 194 bool bin2[8];
jpbaillargeon 18:5c26a8f38248 195 int temps =0;
jpbaillargeon 18:5c26a8f38248 196 int tMax;
jpbaillargeon 18:5c26a8f38248 197 int tMin;
leomerel 14:42a7d108b134 198 while(1){
leomerel 15:872151771dec 199 osEvent evt = mail_box.get();
leomerel 15:872151771dec 200 if (evt.status == osEventMail) {
leomerel 15:872151771dec 201 message_t *f = (message_t*)evt.value.p;
leomerel 15:872151771dec 202 led3 = f->front;
leomerel 15:872151771dec 203 t = f->time;
jpbaillargeon 16:a163a7c0315b 204 if(etat==0) {
jpbaillargeon 16:a163a7c0315b 205 if(f->front == 0){
leomerel 15:872151771dec 206 compteur=0;
leomerel 15:872151771dec 207 timer.start();
leomerel 15:872151771dec 208 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
leomerel 15:872151771dec 209 preambule[compteur] = f->front;
jpbaillargeon 16:a163a7c0315b 210 prev_time = t;
jpbaillargeon 16:a163a7c0315b 211 compteur++;
leomerel 15:872151771dec 212 etat = 1;
jpbaillargeon 16:a163a7c0315b 213 printf("-----ETAT 1-----\r\n");
leomerel 15:872151771dec 214 }
jpbaillargeon 16:a163a7c0315b 215 }
jpbaillargeon 16:a163a7c0315b 216
jpbaillargeon 16:a163a7c0315b 217 else if(etat==1) {
jpbaillargeon 16:a163a7c0315b 218 if(f->front==1){
leomerel 15:872151771dec 219 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
leomerel 15:872151771dec 220 preambule[compteur] = f->front;
jpbaillargeon 16:a163a7c0315b 221 prev_time = t;
jpbaillargeon 16:a163a7c0315b 222 compteur++;
jpbaillargeon 16:a163a7c0315b 223 etat = 2;
jpbaillargeon 16:a163a7c0315b 224 printf("-----ETAT 2-----\r\n");
leomerel 15:872151771dec 225 }
leomerel 15:872151771dec 226 }
jpbaillargeon 16:a163a7c0315b 227
jpbaillargeon 16:a163a7c0315b 228 else if(etat==2) {
jpbaillargeon 16:a163a7c0315b 229 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 230 preambule[compteur] = f->front;
jpbaillargeon 18:5c26a8f38248 231 temps += t-prev_time;
jpbaillargeon 16:a163a7c0315b 232 prev_time = t;
jpbaillargeon 16:a163a7c0315b 233 compteur++;
jpbaillargeon 16:a163a7c0315b 234 }
jpbaillargeon 16:a163a7c0315b 235
jpbaillargeon 16:a163a7c0315b 236 else if(etat ==3) {
jpbaillargeon 19:ae8e7c9292d6 237 if(((t-prev_time)<=tMax)&& ((t-prev_time)>=tMin)){
leomerel 15:872151771dec 238 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 239 start[compteur-8] = f->front;
jpbaillargeon 16:a163a7c0315b 240 prev_time = t;
jpbaillargeon 16:a163a7c0315b 241 compteur++;
leomerel 15:872151771dec 242 }
jpbaillargeon 16:a163a7c0315b 243 }
jpbaillargeon 16:a163a7c0315b 244
jpbaillargeon 16:a163a7c0315b 245 else if(etat ==4) {
jpbaillargeon 19:ae8e7c9292d6 246 if(((t-prev_time)<=tMax)&& ((t-prev_time)>=tMin)){
jpbaillargeon 16:a163a7c0315b 247 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 248 flag[compteur-16] = f->front;
jpbaillargeon 16:a163a7c0315b 249 prev_time = t;
jpbaillargeon 16:a163a7c0315b 250 compteur++;
jpbaillargeon 16:a163a7c0315b 251 }
jpbaillargeon 16:a163a7c0315b 252 }
jpbaillargeon 16:a163a7c0315b 253
jpbaillargeon 16:a163a7c0315b 254 else if(etat ==5) {
jpbaillargeon 19:ae8e7c9292d6 255 if(((t-prev_time)<=tMax)&& ((t-prev_time)>=tMin)){
leomerel 15:872151771dec 256 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 257 longueur[compteur-24] = f->front;
jpbaillargeon 16:a163a7c0315b 258 prev_time = t;
jpbaillargeon 16:a163a7c0315b 259 compteur++;
jpbaillargeon 16:a163a7c0315b 260 }
jpbaillargeon 16:a163a7c0315b 261 }
jpbaillargeon 16:a163a7c0315b 262 else if(etat ==6) {
jpbaillargeon 19:ae8e7c9292d6 263 if(((t-prev_time)<=tMax)&& ((t-prev_time)>=tMin)){
jpbaillargeon 16:a163a7c0315b 264 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 265 message[compteur-32]= f->front;
jpbaillargeon 16:a163a7c0315b 266 prev_time = t;
jpbaillargeon 16:a163a7c0315b 267 compteur++;
leomerel 15:872151771dec 268 }
jpbaillargeon 16:a163a7c0315b 269 }
jpbaillargeon 16:a163a7c0315b 270 else if(etat ==7) {
jpbaillargeon 19:ae8e7c9292d6 271 if(((t-prev_time)<=tMax)&& ((t-prev_time)>=tMin)){
jpbaillargeon 16:a163a7c0315b 272 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 273 checksum[compteur-32-longInt]= f->front;
jpbaillargeon 16:a163a7c0315b 274 prev_time = t;
jpbaillargeon 16:a163a7c0315b 275 compteur++;
jpbaillargeon 16:a163a7c0315b 276 }
jpbaillargeon 16:a163a7c0315b 277 }
jpbaillargeon 16:a163a7c0315b 278 else if(etat ==8) {
jpbaillargeon 19:ae8e7c9292d6 279 if(((t-prev_time)<=tMax)&& ((t-prev_time)>=tMin)){
jpbaillargeon 16:a163a7c0315b 280 printf("%d Time : %d , compteur: %d\r\n", f->front, t, compteur);
jpbaillargeon 16:a163a7c0315b 281 end[compteur-40-longInt]= f->front;
jpbaillargeon 16:a163a7c0315b 282 prev_time = t;
jpbaillargeon 16:a163a7c0315b 283 compteur++;
jpbaillargeon 16:a163a7c0315b 284 }
jpbaillargeon 16:a163a7c0315b 285 }
leomerel 15:872151771dec 286 mail_box.free(f);
leomerel 15:872151771dec 287 }
jpbaillargeon 16:a163a7c0315b 288
jpbaillargeon 17:53d4674cb37f 289 if((compteur ==8) && (etat ==2)){
jpbaillargeon 17:53d4674cb37f 290 etat = 3;
jpbaillargeon 16:a163a7c0315b 291 for(int i=0; i<8;i++){
jpbaillargeon 17:53d4674cb37f 292 if((preambule[i]!= PREAMBULE[i]) && (etat !=0 ))
jpbaillargeon 16:a163a7c0315b 293 {
jpbaillargeon 16:a163a7c0315b 294 etat =0;
jpbaillargeon 17:53d4674cb37f 295 printf("\r\n------Pas le bon PREAMBULE------\r\n");
leomerel 15:872151771dec 296 }
leomerel 15:872151771dec 297 printf("%d", preambule[i]);
leomerel 15:872151771dec 298 }
leomerel 15:872151771dec 299 printf("\r\n");
jpbaillargeon 17:53d4674cb37f 300 if(etat != 0)
jpbaillargeon 17:53d4674cb37f 301 {
jpbaillargeon 18:5c26a8f38248 302 temps /=6;
jpbaillargeon 19:ae8e7c9292d6 303 tMin = 0.75*temps;
jpbaillargeon 19:ae8e7c9292d6 304 tMax = 1.25*temps;
jpbaillargeon 18:5c26a8f38248 305 printf("-----ETAT 3 %d-----\r\n", temps);
jpbaillargeon 17:53d4674cb37f 306 }
leomerel 15:872151771dec 307 }
jpbaillargeon 17:53d4674cb37f 308 else if((compteur ==16) && (etat == 3)) {
jpbaillargeon 17:53d4674cb37f 309 etat =4;
jpbaillargeon 16:a163a7c0315b 310 for(int i=0; i<8;i++){
jpbaillargeon 17:53d4674cb37f 311 if((start[i]!= START_END[i]) && (etat != 0))
jpbaillargeon 16:a163a7c0315b 312 {
jpbaillargeon 16:a163a7c0315b 313 etat =0;
jpbaillargeon 17:53d4674cb37f 314 printf("\r\n------Pas le bon START------\r\n");
jpbaillargeon 16:a163a7c0315b 315 }
jpbaillargeon 16:a163a7c0315b 316 printf("%d", start[i]);
jpbaillargeon 16:a163a7c0315b 317 }
jpbaillargeon 16:a163a7c0315b 318 printf("\r\n");
jpbaillargeon 17:53d4674cb37f 319 if(etat != 0)
jpbaillargeon 17:53d4674cb37f 320 {
jpbaillargeon 17:53d4674cb37f 321 printf("-----ETAT 4-----\r\n");
jpbaillargeon 17:53d4674cb37f 322 }
jpbaillargeon 16:a163a7c0315b 323 }
jpbaillargeon 17:53d4674cb37f 324 else if((compteur==24) && (etat ==4)) {
jpbaillargeon 16:a163a7c0315b 325 for(int i=0; i<8;i++){
jpbaillargeon 16:a163a7c0315b 326 printf("%d", flag[i]);
jpbaillargeon 16:a163a7c0315b 327 }
jpbaillargeon 16:a163a7c0315b 328 printf("\r\n");
jpbaillargeon 16:a163a7c0315b 329 etat =5;
jpbaillargeon 16:a163a7c0315b 330 printf("-----ETAT 5 -----\r\n");
jpbaillargeon 16:a163a7c0315b 331 }
jpbaillargeon 17:53d4674cb37f 332 else if((compteur==32) && (etat ==5)) {
jpbaillargeon 16:a163a7c0315b 333 longInt=0;
jpbaillargeon 16:a163a7c0315b 334 for(int i = 0; i<8; i++) {
jpbaillargeon 16:a163a7c0315b 335 longInt = longInt*2+longueur[i];
jpbaillargeon 16:a163a7c0315b 336 }
jpbaillargeon 16:a163a7c0315b 337 printf("%d\r\n", longInt);
jpbaillargeon 16:a163a7c0315b 338 etat =6;
jpbaillargeon 16:a163a7c0315b 339 printf("-----ETAT 6 -----\r\n");
jpbaillargeon 16:a163a7c0315b 340 }
jpbaillargeon 17:53d4674cb37f 341 else if((compteur==32+longInt) && (etat ==6)) {
jpbaillargeon 16:a163a7c0315b 342 for(int i=0; i<longInt;i++){
jpbaillargeon 16:a163a7c0315b 343 printf("%d", message[i]);
jpbaillargeon 16:a163a7c0315b 344 }
jpbaillargeon 16:a163a7c0315b 345 printf("\r\n");
jpbaillargeon 16:a163a7c0315b 346 etat =7;
jpbaillargeon 16:a163a7c0315b 347 printf("-----ETAT 7-----\r\n");
jpbaillargeon 16:a163a7c0315b 348 }
jpbaillargeon 16:a163a7c0315b 349
jpbaillargeon 17:53d4674cb37f 350 else if((compteur == 40 +longInt) && (etat ==7)) {
jpbaillargeon 17:53d4674cb37f 351 etat =8;
jpbaillargeon 16:a163a7c0315b 352 unsigned short crc = crc16(message, (int)sizeof(message));
jpbaillargeon 19:ae8e7c9292d6 353 printf("\r\n -----------------CRC RECALCULE: %d-------------\r\n", crc);
jpbaillargeon 19:ae8e7c9292d6 354 int_to_bin2(bin2, crc);
jpbaillargeon 16:a163a7c0315b 355 for(int i=0; i<8;i++){
jpbaillargeon 17:53d4674cb37f 356 printf("%d", bin2[i]);
jpbaillargeon 17:53d4674cb37f 357 if((bin2[i] != checksum[i]) && (etat !=0)) {
jpbaillargeon 16:a163a7c0315b 358 etat =0;
jpbaillargeon 17:53d4674cb37f 359 printf("\r\n------Pas le bon CRC------\r\n");
jpbaillargeon 17:53d4674cb37f 360 }
jpbaillargeon 16:a163a7c0315b 361 }
jpbaillargeon 16:a163a7c0315b 362
jpbaillargeon 16:a163a7c0315b 363 printf("\r\n");
jpbaillargeon 17:53d4674cb37f 364 if(etat != 0)
jpbaillargeon 17:53d4674cb37f 365 {
jpbaillargeon 17:53d4674cb37f 366 printf("-----ETAT 8-----\r\n");
jpbaillargeon 17:53d4674cb37f 367 }
jpbaillargeon 16:a163a7c0315b 368 }
jpbaillargeon 17:53d4674cb37f 369 else if((compteur == 48 +longInt) && (etat ==8)) {
jpbaillargeon 16:a163a7c0315b 370 for(int i=0; i<8;i++){
jpbaillargeon 16:a163a7c0315b 371 if(end[i]!= START_END[i])
jpbaillargeon 16:a163a7c0315b 372 {
jpbaillargeon 16:a163a7c0315b 373 etat =0;
jpbaillargeon 17:53d4674cb37f 374 printf("\r\n------Pas le bon END------\r\n");
jpbaillargeon 16:a163a7c0315b 375 }
jpbaillargeon 16:a163a7c0315b 376 printf("%d", end[i]);
jpbaillargeon 16:a163a7c0315b 377 }
jpbaillargeon 16:a163a7c0315b 378 printf("\r\n");
jpbaillargeon 16:a163a7c0315b 379 etat =0;
jpbaillargeon 16:a163a7c0315b 380 printf("-----ETAT 0-----\r\n");
jpbaillargeon 16:a163a7c0315b 381 }
leomerel 14:42a7d108b134 382 }
leomerel 14:42a7d108b134 383 }
leomerel 14:42a7d108b134 384
leomerel 15:872151771dec 385 void rise() {
leomerel 15:872151771dec 386 led1 = !led1;
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 message_t *a = mail_box.alloc();
leomerel 15:872151771dec 396 a->time = timer.read_ms();;
leomerel 15:872151771dec 397 a->front = 1;
leomerel 15:872151771dec 398 mail_box.put(a);
leomerel 14:42a7d108b134 399 }
leomerel 14:42a7d108b134 400
leomerel 14:42a7d108b134 401
emilmont 1:491820ee784d 402 int main() {
jpbaillargeon 19:ae8e7c9292d6 403 printf("\r\n\r\n**********Debut**********\r\n");
leomerel 14:42a7d108b134 404 int length = sizeof(messageUtile);
leomerel 14:42a7d108b134 405 bool message[length+6*8];
jpbaillargeon 19:ae8e7c9292d6 406 bool manchester[(length+6*8)*2];
leomerel 14:42a7d108b134 407 creationTrame(message,length);
jpbaillargeon 19:ae8e7c9292d6 408 printf("\r\nMessage : \r\n");
leomerel 14:42a7d108b134 409 for(int i=0; i<sizeof(message); i++){
leomerel 14:42a7d108b134 410 if(i>0 && i%8 == 0){
leomerel 14:42a7d108b134 411 printf(" ");
leomerel 14:42a7d108b134 412 }
leomerel 14:42a7d108b134 413 printf("%d",message[i]);
leomerel 14:42a7d108b134 414 }
leomerel 14:42a7d108b134 415 printf("\r\n");
jpbaillargeon 19:ae8e7c9292d6 416 convertMessageToManchester(manchester, message, length+6*8);
jpbaillargeon 19:ae8e7c9292d6 417 printf("\r\nMessage Manchester: \r\n");
jpbaillargeon 19:ae8e7c9292d6 418 for(int i=0; i<sizeof(manchester); i++){
jpbaillargeon 19:ae8e7c9292d6 419 if(i>0 && i%16 == 0){
jpbaillargeon 19:ae8e7c9292d6 420 printf("\r\n");
jpbaillargeon 19:ae8e7c9292d6 421 }
leomerel 14:42a7d108b134 422 if(i>0 && i%2 == 0){
leomerel 14:42a7d108b134 423 printf(" ");
leomerel 14:42a7d108b134 424 }
leomerel 14:42a7d108b134 425 printf("%d",manchester[i]);
leomerel 14:42a7d108b134 426 }
leomerel 14:42a7d108b134 427 printf("\r\n");
leomerel 14:42a7d108b134 428
leomerel 15:872151771dec 429
leomerel 15:872151771dec 430
leomerel 14:42a7d108b134 431 envoi_t.start(envoiTrame);
leomerel 14:42a7d108b134 432 reception_t.start(receptionTrames);
leomerel 15:872151771dec 433 button.rise(&rise); // attach the address of the flip function to the rising edge
leomerel 15:872151771dec 434 button.fall(&fall);
leomerel 14:42a7d108b134 435 while(1) { // wait around, interrupts will interrupt this!
leomerel 14:42a7d108b134 436 flash = !flash;
leomerel 14:42a7d108b134 437 wait(0.25);
leomerel 14:42a7d108b134 438 }
emilmont 1:491820ee784d 439 }
jpbaillargeon 16:a163a7c0315b 440