Temporary Connector Reversed Version

Dependencies:   UniGraphic mbed vt100

afero_poc15_180403R , J1 のピン配置を反転させたヴァージョンです。

Color2系を使用するためには以下のピンをジャンパで接続してください。
J1-D7 <-> J1-D0
J1-D6 <-> J1-D1

(調査中) また、こちらでテストした範囲では、
FRDM-KL25Z の V3.3 を、Modulo2 の VCC_3V3 ピンに接続してやる必要がありました。

尚、J1-D1, D0 を使用するために UART を無効にしているため
ログは表示されません。

TFTモジュールについて 
aitendoのTFTモジュールはデフォルトでは8bit bus モードになっています。
/media/uploads/Rhyme/img_2364.jpg

半田のジャンパを変えて、SPIの設定にしてください。
/media/uploads/Rhyme/img_2363.jpg

サーミスタについて
POC1.5 では サーミスタは 25℃の時に抵抗値が 50.0kΩになる502AT-11 が
4.95kΩのプルアップ(実際は10kΩx2の並列)で使用されていました。

今回の試作では抵抗値が 10.0kΩの 103AT-11 が
5.1kΩのプルアップで使用されていますので、係数を合わせるために
SMTC502AT-11 のコンストラクタを 
R0 = 10.0
R1 = 5.1
B = 3435
T0 = 298.15
で呼ぶように変更しました。

edge_sensor/edge_color.h

Committer:
Rhyme
Date:
2018-04-24
Revision:
1:6c54dc8acf96
Parent:
0:0b6732b53bf4

File content as of revision 1:6c54dc8acf96:

#ifndef _EDGE_COLOR_H_
#define _EDGE_COLOR_H_
#include "mbed.h"
#include "edge_sensor.h"
#include "VEML6040.h"

/**
 * edge_color edge_sensor which manages LED and color sensor (VEML6040)
 */

class edge_color : public edge_sensor {
public:
/**
 * constructor 
 * @param *sensor VEML6040 object
 * @param *led[] PwmOuts for LEDs
 * @param *pwm[] uint16_t pwm duty values
 */
    edge_color(VEML6040 *sensor, PwmOut *led[], uint16_t *pwm) ;
    
/**
 * destructor
 */
    ~edge_color(void) ;

/**
 * reset and clear internal values
 */
    virtual void        reset(void) ;

/**
 * prepare at first this was planned to set LEDs 
 * before sampling, but turned out to be not neccesarry
 */
    virtual void        prepare(void) ;

/**
 * sample sampling the color value(s) is some what complicated.
 * At first leds are turned on using the pwm values _pwm[].
 * then VEML6040 is triggered with config value, which includes
 * the trigger method and integration time.
 * Wait for the integration time (actually x 1.25 of the value)
 * then acquire the color values from VEML6040 and turn the leds off.
 */
    virtual int        sample(void) ;
    
/**
 * Deliver the sampled value to the afero cloud.
 */
    virtual int         deliver(void) ;
    
/**
 * Show the value(s) in the display (TFT)
 */
    virtual void        show(void) ;

/**
 * calibrate: caribrate the led pwm values trying to adjust the measured
 * values to the values given in target[]. Measurements are repeated
 * num_ave+2 times and the minimum and maximum values will be discarded
 * then average values are calculated using the remaining values.
 * @param target[] uint16_t target values for R, G, B measurement
 * @param result[] uint16_t calibrated pwm R,G,B values
 * @param num_ave repeat time for averaging the measurement data
 */
    void        calibrate(uint16_t target[], uint16_t result[], int num_ave) ;
    
/**
 * request_calibration: set the flag to calibrate next avilable time slot
 */
    void        request_calibration(void) { _calibration_request = 1 ; }
    
/**
 * calibration_requested
 * @returns if the calibration is due
 */
    int         calibration_requested(void) { return _calibration_request ; }
    
/**
 * getAveColor
 * @param led[] uint16_t pwm values for R,G,B
 * @param v[]   uint16_t averaged measurement value
 * @param num_ave int    measurment repeat time for averaging
 */
    void        getAveColor(uint16_t led[], uint16_t v[], int num_ave) ;
    
/**
 * getRGB
 * @param v[] uint16_t measured R,G,B values
 * @returns 0: success non-0: failure
 */
    int        getRGB(uint16_t v[]) ;
    
/**
 * getConfig
 * @returns config this value is used to trigger VEML6040 measurement
 */
    uint8_t     getConfig(void) { return _sensor_config ; }

/**
 * setConfig
 * @param config uint8_t 8bit value to use trigger VEML6040 measurement
 */
    void        setConfig(uint8_t config) { _sensor_config = config ; }
    
/**
 * get_pwm_period
 * @returns pwm_period in us
 */
    uint16_t    get_pwm_period(void) { return _pwm_period ; }   

/**
 * set_pwm_period
 * @param pwm_period uint16_t pwm period in us
 */
    void        set_pwm_period(uint16_t period) { _pwm_period = period ; }
    
/**
 * get_pwm_target
 * @returns measurment target value controlled by the pwm
 */
    uint16_t    get_pwm_target(void) { return _pwm_target ; }
    
/**
 * set_pwm_target
 * @param target uint16_t measurement target value
 */
    void        set_pwm_target(uint16_t target) { _pwm_target = target ; }
    
/**
 * getR
 * @returns measured value of R
 */
    uint16_t    getR(void) { return _value[0] ; }

/**
 * getG
 * @returns measured value of G
 */
    uint16_t    getG(void) { return _value[1] ; }
    
/**
 * getB
 * @returns measured value of B
 */
    uint16_t    getB(void) { return _value[2] ; }
    
/**
 * getPwmR
 * @returns PWM value of R LED
 */
    uint16_t    getPwmR(void) { return _pwm[0] ; }

/**
 * setPwmR
 * @param pwm_r 
 */
   void setPwmR(uint16_t pwm_r) { _pwm[0] = pwm_r ; } 

/**
 * getPwmG
 * @returns PWM value of G LED
 */
    uint16_t    getPwmG(void) { return _pwm[1] ; }

/**
 * setPwmG
 * @param pwm_g 
 */
   void setPwmG(uint16_t pwm_g) { _pwm[1] = pwm_g ; } 
    
/**
 * getPwmB
 * @returns PWM value of B LED
 */
    uint16_t    getPwmB(void) { return _pwm[2] ; }

/**
 * setPwmB
 * @param pwm_b 
 */
   void setPwmB(uint16_t pwm_b) { _pwm[2] = pwm_b ; } 
    
/**
 * setLEDs set pwm values to PwmOut pins to drive LEDS
 * @param led_value[] uint16_t pwm values for R, G, B
 */
    void        setLEDs(uint16_t led_value[]) ;
    
/**
 * setLEDs set pwm values to PwmOut pins to drive LEDS
 * @param r uint16_t pwm value of R LED
 * @param g uint16_t pwm value of G LED
 * @param b uint16_t pwm value of B LED
 */
    void        setLEDs(uint16_t r, uint16_t g, uint16_t b) ;
    
protected:
    VEML6040    *_sensor ;
    uint8_t     _sensor_config ;
    PwmOut      *_led[3] ;
    uint16_t    _pwm_period ;
    uint16_t    _pwm_target ;
    uint16_t    _value[3] ; /* r, g, b */
    uint16_t    _pwm[3] ;   /* r, g, b */
    uint16_t    _probe ; /* probing value for calibration */
    uint8_t     _calibration_request ;
} ;

extern uint16_t        color0_pwm[3] ;
extern uint16_t        color1_pwm[3] ;
extern uint16_t        color0_target[3] ;
extern uint16_t        color1_target[3] ;

#endif /* _EDGE_COLOR_H_ */