Adjusts the great pinscape controller to work with a cheap linear potentiometer instead of the expensive CCD array

Dependencies:   USBDevice mbed

Fork of Pinscape_Controller by Mike R

tsl410r.cpp

Committer:
mjr
Date:
2014-07-16
Revision:
1:d913e0afb2ac
Parent:
tls1410r.cpp@ 0:5acbbe3f4cf4

File content as of revision 1:d913e0afb2ac:

#include "mbed.h"
#include "tsl1410r.h"

TSL1410R::TSL1410R(PinName siPort, PinName clockPort, PinName aoPort)
    : si(siPort), clock(clockPort), ao(aoPort)
{
    // clear out power-on noise by clocking through all pixels twice
    clear();
    clear();
}

void TSL1410R::clear()
{
    // clock in an SI pulse
    si = 1;
    clock = 1;
    clock = 0;
    si = 0;
    
    // clock out all pixels
    for (int i = 0 ; i < nPix+1 ; ++i) {
        clock = 1;
        clock = 0;
    }
}

void TSL1410R::read(uint16_t *pix, int n, int integrate_us)
{
    // Start an integration cycle - pulse SI, then clock all pixels.  The
    // CCD will integrate light starting 18 clocks after the SI pulse, and
    // continues integrating until the next SI pulse, which cannot occur
    // until all pixels have been clocked.
    si = 1;
    clock = 1;
    clock = 0;
    si = 0;
    for (int i = 0 ; i < nPix+1 ; ++i) {
        clock = 1;
        clock = 0;
    }
        
    // delay by the specified additional integration time
    wait_us(integrate_us);
    
    // end the current integration cycle and hold the integrated values
    si = 1;
    clock = 1;
    clock = 0;
    si = 0;
    
    // figure how many pixels to skip on each read
    int skip = nPix/n - 1;

    // read the pixels
    for (int src = 0, dst = 0 ; src < nPix ; ++src)
    {
        // read this pixel
        pix[dst++] = ao.read_u16();
        
        // clock in the next pixel
        clock = 1;
        clock = 0;
        
        // clock skipped pixels
        for (int i = 0 ; i < skip ; ++i, ++src) {
            clock = 1;
            clock = 0;
        }
    }
    
    // clock out one extra pixel to make sure the device is ready for another go
    clock = 1;
    clock = 0;
}