
Manchester decoder for VLC nog e ki geupload
Fork of VLC_decoder_test by
manchester.cpp@4:7ef585175a7b, 2018-05-15 (annotated)
- 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?
User | Revision | Line number | New 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 | } |