finds track with line scan camera

Dependents:   aNXPCupCar

Committer:
pkolar1
Date:
Wed Dec 19 09:13:48 2018 +0000
Revision:
0:7653b2a26797
fin

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pkolar1 0:7653b2a26797 1 #include "mbed.h"
pkolar1 0:7653b2a26797 2 #include "CAMERA.h"
pkolar1 0:7653b2a26797 3
pkolar1 0:7653b2a26797 4 CAMERA::CAMERA(PinName dig1,PinName dig2,PinName an):
pkolar1 0:7653b2a26797 5 SI(dig1),CK(dig2),lux(an)
pkolar1 0:7653b2a26797 6 {
pkolar1 0:7653b2a26797 7 init();
pkolar1 0:7653b2a26797 8 t.attach(this, &CAMERA::protocol, 0.02);
pkolar1 0:7653b2a26797 9 }
pkolar1 0:7653b2a26797 10
pkolar1 0:7653b2a26797 11 void CAMERA::init()
pkolar1 0:7653b2a26797 12 {
pkolar1 0:7653b2a26797 13 SI = 0;
pkolar1 0:7653b2a26797 14 CK = 0;
pkolar1 0:7653b2a26797 15 halfPulse = 0.0000005; //0.5 microseconds
pkolar1 0:7653b2a26797 16 carrot = 64;
pkolar1 0:7653b2a26797 17 for(i=0; i < 128; i++) pixel[i] = 0;
pkolar1 0:7653b2a26797 18 }
pkolar1 0:7653b2a26797 19
pkolar1 0:7653b2a26797 20 void CAMERA::protocol()
pkolar1 0:7653b2a26797 21 {
pkolar1 0:7653b2a26797 22 sum = 0;
pkolar1 0:7653b2a26797 23 SI = 1;
pkolar1 0:7653b2a26797 24 wait(halfPulse);
pkolar1 0:7653b2a26797 25 CK = 1;
pkolar1 0:7653b2a26797 26 wait(halfPulse);
pkolar1 0:7653b2a26797 27 SI = 0;
pkolar1 0:7653b2a26797 28 wait(halfPulse);
pkolar1 0:7653b2a26797 29 pixel[0] = CAMERA::buffer();
pkolar1 0:7653b2a26797 30 CK = 0;
pkolar1 0:7653b2a26797 31 for(i=1; i<128; i++) {
pkolar1 0:7653b2a26797 32 wait(halfPulse);
pkolar1 0:7653b2a26797 33 wait(halfPulse);
pkolar1 0:7653b2a26797 34 CK = 1;
pkolar1 0:7653b2a26797 35 wait(halfPulse);
pkolar1 0:7653b2a26797 36 wait(halfPulse);
pkolar1 0:7653b2a26797 37 pixel[i] = CAMERA::buffer();
pkolar1 0:7653b2a26797 38 if(i > 9 && i < 118) sum += 1/(float)pixel[i];
pkolar1 0:7653b2a26797 39 CK = 0;
pkolar1 0:7653b2a26797 40
pkolar1 0:7653b2a26797 41 }
pkolar1 0:7653b2a26797 42 wait(halfPulse);
pkolar1 0:7653b2a26797 43 wait(halfPulse);
pkolar1 0:7653b2a26797 44 CK = 1;
pkolar1 0:7653b2a26797 45 wait(halfPulse);
pkolar1 0:7653b2a26797 46 wait(halfPulse);
pkolar1 0:7653b2a26797 47 CK = 0;
pkolar1 0:7653b2a26797 48 CAMERA::pathFinder();
pkolar1 0:7653b2a26797 49 }
pkolar1 0:7653b2a26797 50
pkolar1 0:7653b2a26797 51 int CAMERA::buffer()
pkolar1 0:7653b2a26797 52 {
pkolar1 0:7653b2a26797 53 signal = lux;
pkolar1 0:7653b2a26797 54 return signal*330; //multiplied because of
pkolar1 0:7653b2a26797 55 } //simpler handling of data
pkolar1 0:7653b2a26797 56
pkolar1 0:7653b2a26797 57 void CAMERA::pathFinder()
pkolar1 0:7653b2a26797 58 {
pkolar1 0:7653b2a26797 59 mean = 108 / sum; //harmonic mean
pkolar1 0:7653b2a26797 60 i = carrot - 1;
pkolar1 0:7653b2a26797 61 while(mean < pixel[i] && i > 9) {
pkolar1 0:7653b2a26797 62 xL = i;
pkolar1 0:7653b2a26797 63 i--; //iterations to left
pkolar1 0:7653b2a26797 64 } //from the cursor
pkolar1 0:7653b2a26797 65 i = carrot;
pkolar1 0:7653b2a26797 66 while(mean < pixel[i] && i < 118) {
pkolar1 0:7653b2a26797 67 xR = i;
pkolar1 0:7653b2a26797 68 i++; //iterations to right
pkolar1 0:7653b2a26797 69 } //from the cursor.
pkolar1 0:7653b2a26797 70 carrot = (xL + xR)/2; //aritmetic mean
pkolar1 0:7653b2a26797 71 } //to position cursor
pkolar1 0:7653b2a26797 72
pkolar1 0:7653b2a26797 73 int CAMERA::getPath()
pkolar1 0:7653b2a26797 74 {
pkolar1 0:7653b2a26797 75 return carrot;
pkolar1 0:7653b2a26797 76 }
pkolar1 0:7653b2a26797 77
pkolar1 0:7653b2a26797 78
pkolar1 0:7653b2a26797 79 /*void CAMERA::derivation()
pkolar1 0:7653b2a26797 80 {
pkolar1 0:7653b2a26797 81 min1 = 12;
pkolar1 0:7653b2a26797 82 min2 = 115;
pkolar1 0:7653b2a26797 83 for(i=0; i<5; i++) temp[i] = 0;
pkolar1 0:7653b2a26797 84 for(i=0; i<5; i++) x[i] = 0;
pkolar1 0:7653b2a26797 85 pad = false;
pkolar1 0:7653b2a26797 86 a = 0;
pkolar1 0:7653b2a26797 87 max_temp = 0;
pkolar1 0:7653b2a26797 88 for(i=12; i<64; i++) {
pkolar1 0:7653b2a26797 89 if(pixel[i] < pixel[i-1]) {
pkolar1 0:7653b2a26797 90 pad = true;
pkolar1 0:7653b2a26797 91 temp[a]++;
pkolar1 0:7653b2a26797 92 } else if(pad) {
pkolar1 0:7653b2a26797 93 x[a] = i;
pkolar1 0:7653b2a26797 94 a++;
pkolar1 0:7653b2a26797 95 pad = false;
pkolar1 0:7653b2a26797 96 }
pkolar1 0:7653b2a26797 97 }
pkolar1 0:7653b2a26797 98 for(a=0; a<5; a++) {
pkolar1 0:7653b2a26797 99 if(temp[a] > max_temp) {
pkolar1 0:7653b2a26797 100 max_temp = temp[a];
pkolar1 0:7653b2a26797 101 min1 = x[a];
pkolar1 0:7653b2a26797 102 }
pkolar1 0:7653b2a26797 103 }
pkolar1 0:7653b2a26797 104 for(i=0; i<5; i++) temp[i] = 0;
pkolar1 0:7653b2a26797 105 for(i=0; i<5; i++) x[i] = 0;
pkolar1 0:7653b2a26797 106 pad = false;
pkolar1 0:7653b2a26797 107 a = 0;
pkolar1 0:7653b2a26797 108 max_temp = 0;
pkolar1 0:7653b2a26797 109 for(i=115; i>=64; i--) {
pkolar1 0:7653b2a26797 110 if(pixel[i] < pixel[i+1]) {
pkolar1 0:7653b2a26797 111 pad = true;
pkolar1 0:7653b2a26797 112 temp[a]++;
pkolar1 0:7653b2a26797 113 } else if(pad) {
pkolar1 0:7653b2a26797 114 x[a] = i;
pkolar1 0:7653b2a26797 115 a++;
pkolar1 0:7653b2a26797 116 pad = false;
pkolar1 0:7653b2a26797 117 }
pkolar1 0:7653b2a26797 118 }
pkolar1 0:7653b2a26797 119 for(a=0; a<5; a++) {
pkolar1 0:7653b2a26797 120 if(temp[a] > max_temp) {
pkolar1 0:7653b2a26797 121 max_temp = temp[a];
pkolar1 0:7653b2a26797 122 min2 = x[a];
pkolar1 0:7653b2a26797 123 }
pkolar1 0:7653b2a26797 124 }
pkolar1 0:7653b2a26797 125 }*/