Line scan camera TSL1401
Fork of TSL1401 by
Diff: TSL1401.cpp
- Revision:
- 1:cb081d9f552a
- Parent:
- 0:71198cb26156
--- a/TSL1401.cpp Sun Oct 05 04:12:56 2014 +0000 +++ b/TSL1401.cpp Mon Jul 11 09:15:05 2016 +0000 @@ -9,10 +9,13 @@ /* Constructor */ TSL1401::TSL1401(PinName s, PinName c, PinName a ) { - SI = s; CLK = c; A0 = new AnalogIn( a ); + GaussianMask7[0] = GaussianMask7[6] = 0.004; + GaussianMask7[1] = GaussianMask7[5] = 0.054; + GaussianMask7[2] = GaussianMask7[4] = 0.242; + GaussianMask7[3] = 0.399; } /* Destructor */ TSL1401::~TSL1401() @@ -23,37 +26,99 @@ } } /* Image Caputure */ -int *TSL1401::Capture( int LineStart, int LineStop) +void TSL1401::Capture() { int i; - DigitalOut TAOS_SI(SI); + DigitalOut TAOS_SI(SI);//setting output pin DigitalOut TAOS_CLK(CLK); - Max = 0,Min = 70000; TAOS_SI_HIGH; + wait_us(3); TAOS_CLK_HIGH; + wait_us(3); TAOS_SI_LOW; - ImageData[0] = 0; + wait_us(3); TAOS_CLK_LOW; - for(i = 1; i < LineStart; i++) { - TAOS_CLK_HIGH; + wait_us(3); + for(i = 0; i < 128; i++) + { + TAOS_CLK_HIGH; + wait_us(1); TAOS_CLK_LOW; + wait_us(1); } - for(i = LineStart; i < LineStop; i++) { + wait_ms(10);//setting delay for in or out door + TAOS_SI_HIGH; + wait_us(3); + TAOS_CLK_HIGH; + wait_us(3); + TAOS_SI_LOW; + wait_us(3); + TAOS_CLK_LOW; + wait_us(3); + + for(i=0; i<128; i++) + { + ImageData[i] = A0->read()*100; // input data from camera(one pixel each) TAOS_CLK_HIGH; - ImageData[i] = A0->read_u16(); // inputs data from camera (one pixel each time through loop) + wait_us(2); TAOS_CLK_LOW; - - if(Max < ImageData[i]){ - Max = ImageData[i]; - } - if(Min > ImageData[i]){ - Min = ImageData[i]; - } - + wait_us(2); } - return ImageData; + return ; } +void TSL1401::Median() +{ + int temp=0; + for(int i=0; i<32; i++) + { + temp = Sort(ImageData[4*i], ImageData[4*i+1], ImageData[4*i+2], ImageData[4*i+3]); + MedianData[4*i]=temp; + MedianData[4*i+1]=temp; + MedianData[4*i+2]=temp; + MedianData[4*i+3]=temp; + } + return ; +} + +int TSL1401::Sort(int a, int b, int c, int d) +{ + int indexMin=0; + int temp=0; + int Array[4] = {a,b,c,d}; + + for(int i=0; i<4; i++) + { + indexMin=i; + for(int j=i+1; j<4; j++) + { + if(Array[j]<Array[indexMin]) indexMin=j; + } + temp = Array[indexMin]; + Array[indexMin]=Array[i]; + Array[i] = temp; + } + return (Array[1]+Array[2])/2; +} + +void TSL1401::Gaussian() +{ + double result; + for(int i=3; i<125; i++) + { + for(int j = 0; j < 7; j++) result += MedianData[i-3+j]*GaussianMask7[j]; + GaussianData[i] = result; + result = 0; + } + GaussianData[0] = GaussianData[3]; + GaussianData[1] = GaussianData[3]; + GaussianData[2] = GaussianData[3]; + GaussianData[125] = GaussianData[124]; + GaussianData[126] = GaussianData[124]; + GaussianData[127] = GaussianData[124]; + + return ; +}