Line scan camera TSL1401
Fork of TSL1401 by
Revision 1:cb081d9f552a, committed 2016-07-11
- Comitter:
- lego
- Date:
- Mon Jul 11 09:15:05 2016 +0000
- Parent:
- 0:71198cb26156
- Commit message:
- line scan camera TSL1401
Changed in this revision
TSL1401.cpp | Show annotated file Show diff for this revision Revisions of this file |
TSL1401.h | Show annotated file Show diff for this revision Revisions of this file |
--- 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 ; +}
--- a/TSL1401.h Sun Oct 05 04:12:56 2014 +0000 +++ b/TSL1401.h Mon Jul 11 09:15:05 2016 +0000 @@ -2,21 +2,25 @@ #define TSL1401_H #include "mbed.h" -#include "USBSerial.h" -extern USBSerial serial; -class TSL1401 + +class TSL1401 { public: TSL1401(PinName s, PinName c, PinName a ); ~TSL1401(); - int *Capture( int LineStart, int LineStop); /*caputure image */ - - - int ImageData[128]; /* カメラの値 */ - int Max,Min; /*カメラ読み取り最大値、最小値 */ + void Capture(); + void Median(); + void Gaussian(); + int Sort(int a, int b, int c, int d); + + int ImageData[128]; + int MedianData[128]; + double GaussianData[128]; + double GaussianMask7[7]; + private: PinName SI; PinName CLK; - AnalogIn *A0; + AnalogIn *A0; }; #endif \ No newline at end of file