Line scan camera TSL1401

Fork of TSL1401 by tanabe hitoshi

Files at this revision

API Documentation at this revision

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