Moved to Team 9.
Fork of LineScan by
LineScan.cpp
- Committer:
- ng3600
- Date:
- 2015-03-13
- Revision:
- 0:2d546112b0b8
- Child:
- 1:f10ec868cd71
File content as of revision 0:2d546112b0b8:
/* AnalogIn cam1(CAM1_IN); DigitalOut camSi(CAM_SI); DigitalOut camClk(CAM_CLK); // Definining camera pins. */ #include "LineScan.h" uint16_t read1Bit(AnalogIn cam, DigitalOut *camClk){ uint16_t pixel; //read pixel n pixel = cam.read_u16(); //clock pulse for next pixel n + 1 *camClk = 1; *camClk = 0; return pixel; //return result as an uint16_t (16 bit integer) } void startRead(DigitalOut *camSi, DigitalOut *camClk){ //pulse first clock cycle and start integral pin *camSi = 1; *camClk = 1; *camSi = 0; *camClk = 0; } int processFn(uint16_t *array, int arraySz){ int lineCtr = 0; //replace with cross correlation function or averaging function //currently returns index of smallest item //skip 15 indices on both ends as they are noisy for(int i = 16; i < arraySz - 15; i++){ if(array[i] < array[lineCtr]) lineCtr = i; } return lineCtr; } //call after integration time is done, returns index of array line is expected to be at int getLinePos(AnalogIn cam, DigitalOut *camSi, DigitalOut *camClk){ uint16_t lineAry[NUM_PIX]; int position; //read startRead(camSi, camClk); for(int i = 0; i < NUM_PIX; i++){ lineAry[i] = read1Bit(cam, camClk); } //process line scan data position = processFn(lineAry, NUM_PIX); return position; } /* sample call (handler thread): while(1){ linePos = getLinePos(cameraIn1, si, clk); //volatile linePos, replace with steering angle and read 2 cameras? Thread::wait(14); //sleep for 14 us } */