Manchester decoder for VLC nog e ki geupload

Dependencies:   mbed

Fork of VLC_decoder_test by Jelle Raes

Committer:
JelleRaes
Date:
Mon May 14 09:29:08 2018 +0000
Revision:
2:487a58ce256c
Parent:
1:b89430efe68e
Child:
3:4fad63952e4c
updated detected method

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 0:dad9d23791db 4 DigitalIn signal(p16);
JelleRaes 0:dad9d23791db 5 Serial pc(USBTX, USBRX);
JelleRaes 0:dad9d23791db 6 Timer timer;
JelleRaes 0:dad9d23791db 7 int datal[] = {1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0};
JelleRaes 0:dad9d23791db 8 int datas[] = {1,1,1,1,0,0,0,0,0,0};
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
JelleRaes 0:dad9d23791db 15 int manchester::decode()
JelleRaes 0:dad9d23791db 16 {
JelleRaes 0:dad9d23791db 17
JelleRaes 0:dad9d23791db 18 int previous,current,begin,end=0;
JelleRaes 0:dad9d23791db 19 int time=0;
JelleRaes 0:dad9d23791db 20 int i = 0;
JelleRaes 0:dad9d23791db 21 timer.start();
JelleRaes 0:dad9d23791db 22 while(i< DELAY) {
JelleRaes 0:dad9d23791db 23 previous = current;
JelleRaes 0:dad9d23791db 24 current = signal.read();
JelleRaes 0:dad9d23791db 25 if(current != previous) {
JelleRaes 0:dad9d23791db 26 i=0;
JelleRaes 0:dad9d23791db 27 }
JelleRaes 0:dad9d23791db 28 i++;
JelleRaes 0:dad9d23791db 29 wait_us(100);
JelleRaes 0:dad9d23791db 30 }
JelleRaes 0:dad9d23791db 31 i = 0;
JelleRaes 0:dad9d23791db 32 while(i<4) {
JelleRaes 0:dad9d23791db 33 end = begin;
JelleRaes 0:dad9d23791db 34 previous = current;
JelleRaes 0:dad9d23791db 35 current = signal.read();
JelleRaes 0:dad9d23791db 36 if(current<previous) {
JelleRaes 0:dad9d23791db 37 begin = timer.read_us();
JelleRaes 0:dad9d23791db 38 if(end != 0) {
JelleRaes 0:dad9d23791db 39 time +=(begin - end);
JelleRaes 0:dad9d23791db 40 }
JelleRaes 0:dad9d23791db 41 i++;
JelleRaes 0:dad9d23791db 42 }
JelleRaes 0:dad9d23791db 43
JelleRaes 0:dad9d23791db 44
JelleRaes 0:dad9d23791db 45 }
JelleRaes 0:dad9d23791db 46 float atime=((float)time/3000000);
JelleRaes 0:dad9d23791db 47 i=4;
JelleRaes 0:dad9d23791db 48 wait(atime/2);
JelleRaes 0:dad9d23791db 49
JelleRaes 0:dad9d23791db 50 while(i<10) {
JelleRaes 0:dad9d23791db 51 int x = signal.read();
JelleRaes 0:dad9d23791db 52 wait(atime/2);
JelleRaes 0:dad9d23791db 53 int y = signal.read();
JelleRaes 0:dad9d23791db 54 wait(atime/2);
JelleRaes 0:dad9d23791db 55
JelleRaes 0:dad9d23791db 56 if(x<y) {
JelleRaes 0:dad9d23791db 57 datas[i]=0;
JelleRaes 0:dad9d23791db 58 } else if(x>y) {
JelleRaes 0:dad9d23791db 59 datas[i]=1;
JelleRaes 0:dad9d23791db 60 }
JelleRaes 0:dad9d23791db 61 i++;
JelleRaes 0:dad9d23791db 62 }
JelleRaes 0:dad9d23791db 63
JelleRaes 0:dad9d23791db 64 wait(1);
JelleRaes 0:dad9d23791db 65 printf("\n\raverage time is = %f s\n\r",atime);
JelleRaes 0:dad9d23791db 66 printf("with frequency %f\n\r",1/atime);
JelleRaes 0:dad9d23791db 67 printf("data is:");
JelleRaes 0:dad9d23791db 68 int direction = getDirection(datas);
JelleRaes 0:dad9d23791db 69 for(int j = 0; j<10; j++) {
JelleRaes 0:dad9d23791db 70 printf("%d",datas[j]);
JelleRaes 0:dad9d23791db 71 }
JelleRaes 0:dad9d23791db 72 printf("with direction:%d",direction);
JelleRaes 0:dad9d23791db 73 return direction;
JelleRaes 0:dad9d23791db 74 }
JelleRaes 0:dad9d23791db 75
JelleRaes 0:dad9d23791db 76 int manchester::getDirection(int* data)
JelleRaes 0:dad9d23791db 77 {
JelleRaes 0:dad9d23791db 78 int direction;
JelleRaes 0:dad9d23791db 79 if(data[4]==0) {
JelleRaes 0:dad9d23791db 80 if(data[5]==0) {
JelleRaes 0:dad9d23791db 81 direction = 0;
JelleRaes 0:dad9d23791db 82 } else {
JelleRaes 0:dad9d23791db 83 direction = 1;
JelleRaes 0:dad9d23791db 84 }
JelleRaes 0:dad9d23791db 85 } else {
JelleRaes 0:dad9d23791db 86 if(data[5]==0) {
JelleRaes 0:dad9d23791db 87 direction = 2;
JelleRaes 0:dad9d23791db 88 } else {
JelleRaes 0:dad9d23791db 89 direction = 3;
JelleRaes 0:dad9d23791db 90 }
JelleRaes 0:dad9d23791db 91 }
JelleRaes 0:dad9d23791db 92 return direction;
JelleRaes 0:dad9d23791db 93 }
JelleRaes 1:b89430efe68e 94 bool manchester::vlcDetected(){
JelleRaes 1:b89430efe68e 95 int i = 0;
JelleRaes 2:487a58ce256c 96 bool detected = false;
JelleRaes 1:b89430efe68e 97 while(i<DELAY){
JelleRaes 1:b89430efe68e 98 if(signal.read() != 0){
JelleRaes 2:487a58ce256c 99 detected = true
JelleRaes 1:b89430efe68e 100 }
JelleRaes 1:b89430efe68e 101 wait_us(100)
JelleRaes 1:b89430efe68e 102 }
JelleRaes 2:487a58ce256c 103 return detected;
JelleRaes 1:b89430efe68e 104 }