Line scan camera TSL1401

Fork of TSL1401 by tanabe hitoshi

Committer:
lego
Date:
Mon Jul 11 09:15:05 2016 +0000
Revision:
1:cb081d9f552a
Parent:
0:71198cb26156
line scan camera TSL1401

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ht 0:71198cb26156 1 #include "TSL1401.h"
ht 0:71198cb26156 2
ht 0:71198cb26156 3 /* Macro */
ht 0:71198cb26156 4 #define TAOS_SI_HIGH TAOS_SI = 1
ht 0:71198cb26156 5 #define TAOS_SI_LOW TAOS_SI = 0
ht 0:71198cb26156 6 #define TAOS_CLK_HIGH TAOS_CLK = 1
ht 0:71198cb26156 7 #define TAOS_CLK_LOW TAOS_CLK = 0
ht 0:71198cb26156 8
ht 0:71198cb26156 9 /* Constructor */
ht 0:71198cb26156 10 TSL1401::TSL1401(PinName s, PinName c, PinName a )
ht 0:71198cb26156 11 {
ht 0:71198cb26156 12 SI = s;
ht 0:71198cb26156 13 CLK = c;
ht 0:71198cb26156 14 A0 = new AnalogIn( a );
lego 1:cb081d9f552a 15 GaussianMask7[0] = GaussianMask7[6] = 0.004;
lego 1:cb081d9f552a 16 GaussianMask7[1] = GaussianMask7[5] = 0.054;
lego 1:cb081d9f552a 17 GaussianMask7[2] = GaussianMask7[4] = 0.242;
lego 1:cb081d9f552a 18 GaussianMask7[3] = 0.399;
ht 0:71198cb26156 19 }
ht 0:71198cb26156 20 /* Destructor */
ht 0:71198cb26156 21 TSL1401::~TSL1401()
ht 0:71198cb26156 22 {
ht 0:71198cb26156 23 if( A0 != NULL)
ht 0:71198cb26156 24 {
ht 0:71198cb26156 25 delete A0;
ht 0:71198cb26156 26 }
ht 0:71198cb26156 27 }
ht 0:71198cb26156 28 /* Image Caputure */
lego 1:cb081d9f552a 29 void TSL1401::Capture()
ht 0:71198cb26156 30 {
ht 0:71198cb26156 31 int i;
lego 1:cb081d9f552a 32 DigitalOut TAOS_SI(SI);//setting output pin
ht 0:71198cb26156 33 DigitalOut TAOS_CLK(CLK);
ht 0:71198cb26156 34
ht 0:71198cb26156 35 TAOS_SI_HIGH;
lego 1:cb081d9f552a 36 wait_us(3);
ht 0:71198cb26156 37 TAOS_CLK_HIGH;
lego 1:cb081d9f552a 38 wait_us(3);
ht 0:71198cb26156 39 TAOS_SI_LOW;
lego 1:cb081d9f552a 40 wait_us(3);
ht 0:71198cb26156 41 TAOS_CLK_LOW;
lego 1:cb081d9f552a 42 wait_us(3);
lego 1:cb081d9f552a 43 for(i = 0; i < 128; i++)
lego 1:cb081d9f552a 44 {
lego 1:cb081d9f552a 45 TAOS_CLK_HIGH;
lego 1:cb081d9f552a 46 wait_us(1);
ht 0:71198cb26156 47 TAOS_CLK_LOW;
lego 1:cb081d9f552a 48 wait_us(1);
ht 0:71198cb26156 49 }
lego 1:cb081d9f552a 50 wait_ms(10);//setting delay for in or out door
lego 1:cb081d9f552a 51 TAOS_SI_HIGH;
lego 1:cb081d9f552a 52 wait_us(3);
lego 1:cb081d9f552a 53 TAOS_CLK_HIGH;
lego 1:cb081d9f552a 54 wait_us(3);
lego 1:cb081d9f552a 55 TAOS_SI_LOW;
lego 1:cb081d9f552a 56 wait_us(3);
lego 1:cb081d9f552a 57 TAOS_CLK_LOW;
lego 1:cb081d9f552a 58 wait_us(3);
lego 1:cb081d9f552a 59
lego 1:cb081d9f552a 60 for(i=0; i<128; i++)
lego 1:cb081d9f552a 61 {
lego 1:cb081d9f552a 62 ImageData[i] = A0->read()*100; // input data from camera(one pixel each)
ht 0:71198cb26156 63 TAOS_CLK_HIGH;
lego 1:cb081d9f552a 64 wait_us(2);
ht 0:71198cb26156 65 TAOS_CLK_LOW;
lego 1:cb081d9f552a 66 wait_us(2);
ht 0:71198cb26156 67 }
lego 1:cb081d9f552a 68 return ;
ht 0:71198cb26156 69 }
ht 0:71198cb26156 70
lego 1:cb081d9f552a 71 void TSL1401::Median()
lego 1:cb081d9f552a 72 {
lego 1:cb081d9f552a 73 int temp=0;
lego 1:cb081d9f552a 74 for(int i=0; i<32; i++)
lego 1:cb081d9f552a 75 {
lego 1:cb081d9f552a 76 temp = Sort(ImageData[4*i], ImageData[4*i+1], ImageData[4*i+2], ImageData[4*i+3]);
lego 1:cb081d9f552a 77 MedianData[4*i]=temp;
lego 1:cb081d9f552a 78 MedianData[4*i+1]=temp;
lego 1:cb081d9f552a 79 MedianData[4*i+2]=temp;
lego 1:cb081d9f552a 80 MedianData[4*i+3]=temp;
lego 1:cb081d9f552a 81 }
lego 1:cb081d9f552a 82 return ;
lego 1:cb081d9f552a 83 }
lego 1:cb081d9f552a 84
lego 1:cb081d9f552a 85 int TSL1401::Sort(int a, int b, int c, int d)
lego 1:cb081d9f552a 86 {
lego 1:cb081d9f552a 87 int indexMin=0;
lego 1:cb081d9f552a 88 int temp=0;
lego 1:cb081d9f552a 89 int Array[4] = {a,b,c,d};
lego 1:cb081d9f552a 90
lego 1:cb081d9f552a 91 for(int i=0; i<4; i++)
lego 1:cb081d9f552a 92 {
lego 1:cb081d9f552a 93 indexMin=i;
lego 1:cb081d9f552a 94 for(int j=i+1; j<4; j++)
lego 1:cb081d9f552a 95 {
lego 1:cb081d9f552a 96 if(Array[j]<Array[indexMin]) indexMin=j;
lego 1:cb081d9f552a 97 }
lego 1:cb081d9f552a 98 temp = Array[indexMin];
lego 1:cb081d9f552a 99 Array[indexMin]=Array[i];
lego 1:cb081d9f552a 100 Array[i] = temp;
lego 1:cb081d9f552a 101 }
lego 1:cb081d9f552a 102 return (Array[1]+Array[2])/2;
lego 1:cb081d9f552a 103 }
lego 1:cb081d9f552a 104
lego 1:cb081d9f552a 105 void TSL1401::Gaussian()
lego 1:cb081d9f552a 106 {
lego 1:cb081d9f552a 107 double result;
lego 1:cb081d9f552a 108 for(int i=3; i<125; i++)
lego 1:cb081d9f552a 109 {
lego 1:cb081d9f552a 110 for(int j = 0; j < 7; j++) result += MedianData[i-3+j]*GaussianMask7[j];
lego 1:cb081d9f552a 111 GaussianData[i] = result;
lego 1:cb081d9f552a 112 result = 0;
lego 1:cb081d9f552a 113 }
lego 1:cb081d9f552a 114 GaussianData[0] = GaussianData[3];
lego 1:cb081d9f552a 115 GaussianData[1] = GaussianData[3];
lego 1:cb081d9f552a 116 GaussianData[2] = GaussianData[3];
lego 1:cb081d9f552a 117 GaussianData[125] = GaussianData[124];
lego 1:cb081d9f552a 118 GaussianData[126] = GaussianData[124];
lego 1:cb081d9f552a 119 GaussianData[127] = GaussianData[124];
lego 1:cb081d9f552a 120
lego 1:cb081d9f552a 121 return ;
lego 1:cb081d9f552a 122 }
ht 0:71198cb26156 123
ht 0:71198cb26156 124