for child

Fork of TRP105F_Spline by Akifumi Takahashi

TRP105F_Spline.h

Committer:
aktk
Date:
2016-06-06
Revision:
9:ec1ee4a6b6a4
Parent:
5:7d4fc0979976
Child:
10:b50e4bb40571

File content as of revision 9:ec1ee4a6b6a4:

/**
 *  TRP105F_Spline.h,.cpp
 *
 *  Author: aktk, aktk.j.uec@gmail.com
 *  Tokyo, Japan.
 *
 *  -   This library is for providing a distance from TRP105F, photo-reflect proximity sensor,
 *  to whatever reflect the flash.
 *  -   Deistance is derived as a voltage signal of TRP105F.
 *  -   An object of TRPFS class has an array of sets of
 *  distance(16 bit-value) and voltage(16bit-value) at the distance.
 *  -   The range of distances that an array has in sets is [0:255] by 1.
 *  -   an array is derived from a cubic spline curve model.
 *  -   In order to derive spline curve, some value sets should be got
 *  at the first calibration.
 *
 *  LOG:
 *  ver.1   2015/10/19 - 2015/10/22
 *  ver.2   2015/10/22 -
 *      Distance data type has become unsigned short from int.
 *      Distance data range : [2:20] by 1 -> [0:1024] by 1.
 *  ver.2.1 2016/02.12 - 2016/02/16
 *      Distance data range : [0:1024] -> [0:255].
 *  ver.3.0 2016/05.23 - 
 */
#ifndef TRP105F_Spline_H
#define TRP105F_Spline_H

#define DEFALT_AI_PIN p16

#include "mbed.h"


//  For SPI
//int DAread(int channel);

//  Set of voltage-distance
typedef struct {
    unsigned short x; //  distance
    unsigned short y; //  voltage
} VDset;

//  Type of modality to input data for calibration
enum UseType {
    AsDEBUG,
    AsMODULE
} ;

//
//  TRP105FS Class for get distance from voltage
//
class TRP105FS
{
public:
    //  Constraction
    TRP105FS();
    TRP105FS(unsigned int);
    TRP105FS(unsigned int, UseType);
    TRP105FS(unsigned int, UseType, PinName);
    //TRP105FS(unsigned int arg_num, DataInType arg_dit, unsigned int channel);
    //  Destraction
    ~TRP105FS();
    //  Functions
    unsigned short getDistance(unsigned short); // alias of getX
    unsigned short getDistance(); // get voltage from PinName and getX()
    unsigned short getX(unsigned short);  //  the fuction to get distance.
    unsigned short getY(unsigned short);
    void    calibrateSensor();
    //void    calibrateSensor(VDset* arg_set, unsigned int arg_num);
    void    calibrate();
    void    setSample(unsigned short,unsigned short);
    void    saveSetting();
    void    saveSetting(const char *filename);
    void    loadSetting();
    void    loadSetting(const char *filename);
    void    printOutData(const char *filename);
    void    printThresholds();

private:
    //
    //  Defining Constants
    //
    enum _SetConstant {
        _LIDX = 0,
        _RIDX = 255,
        _ENUM = _RIDX - _LIDX + 1
    };
    //
    //  Variables
    //
    //  Debug or Module
    UseType         _useType;
    //  For data sampling and making spline model
    unsigned int    _Sample_Num;    // the number of samples for derive spline
    VDset*          _Sample_Set;
    double*         _u_spline;
    //  For comvert voltage -> physical quantity e.g. distance
    VDset           _Set[_ENUM];
    unsigned short  _Threshold[_ENUM]; //_Threshold[18] is not used virtually.
    //  For get voltage
    AnalogIn        _ai;
    //
    //
    //  For calibration
    //
    void    _sampleData();
    void    _setSample(unsigned short,unsigned short);
    void    _setSamples(VDset* arg_set, unsigned int arg_num);
    unsigned short _getSplineYof(double arg_x);
    void    _makeSpline();  //  Cubic spline
    //
    //  For get distance
    //
    int     _getNearest(int, int, unsigned short);
    //
    //  For debug
    //
    void    _printOutData(unsigned short    *arg, int num, char* name);
    void    _printOutData(VDset             *arg, int num, char* name);
    void    _printOutData(double            *arg, int num, char* name);
};
#endif