APP4

Dependencies:   mbed-rtos mbed

Fork of rtos_basic by mbed official

Committer:
jpbaillargeon
Date:
Tue Oct 23 20:31:23 2018 +0000
Revision:
23:c704dd99d3f1
Parent:
22:e73831429e1c
valid

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