Jelle Raes / Mbed 2 deprecated VLC_decoder_finished

Dependencies:   mbed

Fork of VLC_decoder_copy_copy_omdatetkan by Jelle Raes

Committer:
JelleRaes
Date:
Mon May 21 14:43:02 2018 +0000
Revision:
6:5de275d946a6
Parent:
5:a9d2050d7a12
final decoder code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JelleRaes 0:dad9d23791db 1 #include "mbed.h"
JelleRaes 0:dad9d23791db 2 #include "manchester.h"
JelleRaes 0:dad9d23791db 3
JelleRaes 3:4fad63952e4c 4 DigitalIn signal(p7);
JelleRaes 0:dad9d23791db 5 Serial pc(USBTX, USBRX);
JelleRaes 0:dad9d23791db 6 Timer timer;
JelleRaes 4:7ef585175a7b 7 Timeout timeout;
JelleRaes 3:4fad63952e4c 8 bool notTimedOut;
JelleRaes 0:dad9d23791db 9
JelleRaes 0:dad9d23791db 10 manchester::manchester()
JelleRaes 0:dad9d23791db 11 {
JelleRaes 0:dad9d23791db 12 }
JelleRaes 0:dad9d23791db 13
JelleRaes 0:dad9d23791db 14 int manchester::decode()
JelleRaes 0:dad9d23791db 15 {
JelleRaes 5:a9d2050d7a12 16
JelleRaes 0:dad9d23791db 17 int previous,current,begin,end=0;
JelleRaes 0:dad9d23791db 18 int time=0;
JelleRaes 0:dad9d23791db 19 int i = 0;
JelleRaes 3:4fad63952e4c 20 int datas[] = {1,1,1,1,0,0,0,0,0,0};
JelleRaes 3:4fad63952e4c 21 notTimedOut = true;
JelleRaes 0:dad9d23791db 22 timer.start();
JelleRaes 0:dad9d23791db 23 while(i< DELAY) {
JelleRaes 0:dad9d23791db 24 previous = current;
JelleRaes 0:dad9d23791db 25 current = signal.read();
JelleRaes 0:dad9d23791db 26 if(current != previous) {
JelleRaes 0:dad9d23791db 27 i=0;
JelleRaes 0:dad9d23791db 28 }
JelleRaes 0:dad9d23791db 29 i++;
JelleRaes 0:dad9d23791db 30 wait_us(100);
JelleRaes 0:dad9d23791db 31 }
JelleRaes 0:dad9d23791db 32 i = 0;
JelleRaes 4:7ef585175a7b 33 timeout.attach(callback(this,&manchester::isTimedOut), 3);
JelleRaes 4:7ef585175a7b 34 while(i<4 && notTimedOut) {
JelleRaes 0:dad9d23791db 35 end = begin;
JelleRaes 0:dad9d23791db 36 previous = current;
JelleRaes 0:dad9d23791db 37 current = signal.read();
JelleRaes 0:dad9d23791db 38 if(current<previous) {
JelleRaes 0:dad9d23791db 39 begin = timer.read_us();
JelleRaes 0:dad9d23791db 40 if(end != 0) {
JelleRaes 0:dad9d23791db 41 time +=(begin - end);
JelleRaes 0:dad9d23791db 42 }
JelleRaes 0:dad9d23791db 43 i++;
JelleRaes 0:dad9d23791db 44 }
JelleRaes 0:dad9d23791db 45 }
JelleRaes 3:4fad63952e4c 46 if(notTimedOut == true) {
JelleRaes 3:4fad63952e4c 47 float atime=((float)time/3000000);
JelleRaes 3:4fad63952e4c 48 i=4;
JelleRaes 0:dad9d23791db 49 wait(atime/2);
JelleRaes 3:4fad63952e4c 50 while(i<10) {
JelleRaes 3:4fad63952e4c 51 int x = signal.read();
JelleRaes 3:4fad63952e4c 52 wait(atime/2);
JelleRaes 3:4fad63952e4c 53 int y = signal.read();
JelleRaes 3:4fad63952e4c 54 wait(atime/2);
JelleRaes 0:dad9d23791db 55
JelleRaes 3:4fad63952e4c 56 if(x<y) {
JelleRaes 3:4fad63952e4c 57 datas[i]=0;
JelleRaes 3:4fad63952e4c 58 } else if(x>y) {
JelleRaes 3:4fad63952e4c 59 datas[i]=1;
JelleRaes 3:4fad63952e4c 60 }
JelleRaes 3:4fad63952e4c 61 i++;
JelleRaes 0:dad9d23791db 62 }
JelleRaes 3:4fad63952e4c 63 wait(1);
JelleRaes 3:4fad63952e4c 64 pc.printf("\n\raverage time is = %f s\n\r",atime);
JelleRaes 3:4fad63952e4c 65 pc.printf("with frequency %f\n\r",1/atime);
JelleRaes 3:4fad63952e4c 66 pc.printf("data is:");
JelleRaes 3:4fad63952e4c 67 int direction = getDirection(datas);
JelleRaes 5:a9d2050d7a12 68 bool stopcode =getStopCode(datas);
JelleRaes 3:4fad63952e4c 69 for(int j = 0; j<10; j++) {
JelleRaes 3:4fad63952e4c 70 printf("%d",datas[j]);
JelleRaes 3:4fad63952e4c 71 }
JelleRaes 3:4fad63952e4c 72 printf("with direction:%d\r\n",direction);
JelleRaes 3:4fad63952e4c 73 timer.stop();
JelleRaes 5:a9d2050d7a12 74 if(stopcode==true){
JelleRaes 5:a9d2050d7a12 75 return direction;
JelleRaes 5:a9d2050d7a12 76 }
JelleRaes 5:a9d2050d7a12 77 else{
JelleRaes 5:a9d2050d7a12 78 return 5;
JelleRaes 5:a9d2050d7a12 79 }
JelleRaes 5:a9d2050d7a12 80 //return direction;
JelleRaes 3:4fad63952e4c 81 } else {
JelleRaes 3:4fad63952e4c 82 printf("timed out\r\n");
JelleRaes 3:4fad63952e4c 83 return 4;
JelleRaes 0:dad9d23791db 84 }
JelleRaes 5:a9d2050d7a12 85 //}
JelleRaes 0:dad9d23791db 86 }
JelleRaes 0:dad9d23791db 87
JelleRaes 0:dad9d23791db 88 int manchester::getDirection(int* data)
JelleRaes 0:dad9d23791db 89 {
JelleRaes 0:dad9d23791db 90 int direction;
JelleRaes 0:dad9d23791db 91 if(data[4]==0) {
JelleRaes 0:dad9d23791db 92 if(data[5]==0) {
JelleRaes 0:dad9d23791db 93 direction = 0;
JelleRaes 0:dad9d23791db 94 } else {
JelleRaes 0:dad9d23791db 95 direction = 1;
JelleRaes 0:dad9d23791db 96 }
JelleRaes 0:dad9d23791db 97 } else {
JelleRaes 0:dad9d23791db 98 if(data[5]==0) {
JelleRaes 0:dad9d23791db 99 direction = 2;
JelleRaes 0:dad9d23791db 100 } else {
JelleRaes 0:dad9d23791db 101 direction = 3;
JelleRaes 0:dad9d23791db 102 }
JelleRaes 0:dad9d23791db 103 }
JelleRaes 0:dad9d23791db 104 return direction;
JelleRaes 0:dad9d23791db 105 }
JelleRaes 3:4fad63952e4c 106
JelleRaes 3:4fad63952e4c 107 void manchester::isTimedOut()
JelleRaes 3:4fad63952e4c 108 {
JelleRaes 3:4fad63952e4c 109 notTimedOut = false;
JelleRaes 3:4fad63952e4c 110 }
JelleRaes 3:4fad63952e4c 111
JelleRaes 5:a9d2050d7a12 112 bool manchester::getStopCode(int* data)
JelleRaes 3:4fad63952e4c 113 {
JelleRaes 5:a9d2050d7a12 114 bool code= true;
JelleRaes 5:a9d2050d7a12 115 int test[] = {0,0,0,0,0,0,0,0,0,1};
JelleRaes 5:a9d2050d7a12 116 for(int i = 6; i < 10; i++){
JelleRaes 5:a9d2050d7a12 117 if(data[i]==test[i]){
JelleRaes 5:a9d2050d7a12 118 code = true;
JelleRaes 5:a9d2050d7a12 119 }
JelleRaes 5:a9d2050d7a12 120 else{
JelleRaes 5:a9d2050d7a12 121 code = false;
JelleRaes 5:a9d2050d7a12 122 break;
JelleRaes 5:a9d2050d7a12 123 }
JelleRaes 5:a9d2050d7a12 124 }
JelleRaes 5:a9d2050d7a12 125 return code;
JelleRaes 3:4fad63952e4c 126 }