Line scan camera TSL1401
Fork of TSL1401 by
TSL1401.cpp@1:cb081d9f552a, 2016-07-11 (annotated)
- 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?
User | Revision | Line number | New 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 |