Manchester decoder for VLC nog e ki geupload

Dependencies:   mbed

Fork of VLC_decoder_test by Jelle Raes

Committer:
JelleRaes
Date:
Tue May 15 08:31:13 2018 +0000
Revision:
4:7ef585175a7b
Parent:
3:4fad63952e4c
with timeout;

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