Line scan camera TSL1401

Fork of TSL1401 by tanabe hitoshi

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 ;
+}