Added a GPIO to power on/off for external I2C sensor(s) (with LEDs)

Dependencies:   UniGraphic mbed vt100

18-Jun-2018 外部センサの電源オン・オフ機能は下位互換の為に無効になっていました。 この版で再度有効にしました。

Committer:
Rhyme
Date:
Fri Apr 13 04:19:23 2018 +0000
Revision:
0:846e2321c637
power to color sensor on/off test OK. Currently the function is disabled.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:846e2321c637 1 #ifndef _EDGE_COLOR_H_
Rhyme 0:846e2321c637 2 #define _EDGE_COLOR_H_
Rhyme 0:846e2321c637 3 #include "mbed.h"
Rhyme 0:846e2321c637 4 #include "edge_sensor.h"
Rhyme 0:846e2321c637 5 #include "VEML6040.h"
Rhyme 0:846e2321c637 6
Rhyme 0:846e2321c637 7 /**
Rhyme 0:846e2321c637 8 * edge_color edge_sensor which manages LED and color sensor (VEML6040)
Rhyme 0:846e2321c637 9 */
Rhyme 0:846e2321c637 10
Rhyme 0:846e2321c637 11 class edge_color : public edge_sensor {
Rhyme 0:846e2321c637 12 public:
Rhyme 0:846e2321c637 13 /**
Rhyme 0:846e2321c637 14 * constructor
Rhyme 0:846e2321c637 15 * @param *sensor VEML6040 object
Rhyme 0:846e2321c637 16 * @param *led[] PwmOuts for LEDs
Rhyme 0:846e2321c637 17 * @param *pwm[] uint16_t pwm duty values
Rhyme 0:846e2321c637 18 */
Rhyme 0:846e2321c637 19 edge_color(VEML6040 *sensor, PwmOut *led[], uint16_t *pwm) ;
Rhyme 0:846e2321c637 20
Rhyme 0:846e2321c637 21 /**
Rhyme 0:846e2321c637 22 * destructor
Rhyme 0:846e2321c637 23 */
Rhyme 0:846e2321c637 24 ~edge_color(void) ;
Rhyme 0:846e2321c637 25
Rhyme 0:846e2321c637 26 /**
Rhyme 0:846e2321c637 27 * reset and clear internal values
Rhyme 0:846e2321c637 28 */
Rhyme 0:846e2321c637 29 virtual void reset(void) ;
Rhyme 0:846e2321c637 30
Rhyme 0:846e2321c637 31 /**
Rhyme 0:846e2321c637 32 * prepare at first this was planned to set LEDs
Rhyme 0:846e2321c637 33 * before sampling, but turned out to be not neccesarry
Rhyme 0:846e2321c637 34 */
Rhyme 0:846e2321c637 35 virtual void prepare(void) ;
Rhyme 0:846e2321c637 36
Rhyme 0:846e2321c637 37 /**
Rhyme 0:846e2321c637 38 * sample sampling the color value(s) is some what complicated.
Rhyme 0:846e2321c637 39 * At first leds are turned on using the pwm values _pwm[].
Rhyme 0:846e2321c637 40 * then VEML6040 is triggered with config value, which includes
Rhyme 0:846e2321c637 41 * the trigger method and integration time.
Rhyme 0:846e2321c637 42 * Wait for the integration time (actually x 1.25 of the value)
Rhyme 0:846e2321c637 43 * then acquire the color values from VEML6040 and turn the leds off.
Rhyme 0:846e2321c637 44 */
Rhyme 0:846e2321c637 45 virtual int sample(void) ;
Rhyme 0:846e2321c637 46
Rhyme 0:846e2321c637 47 /**
Rhyme 0:846e2321c637 48 * Deliver the sampled value to the afero cloud.
Rhyme 0:846e2321c637 49 */
Rhyme 0:846e2321c637 50 virtual int deliver(void) ;
Rhyme 0:846e2321c637 51
Rhyme 0:846e2321c637 52 /**
Rhyme 0:846e2321c637 53 * Show the value(s) in the display (TFT)
Rhyme 0:846e2321c637 54 */
Rhyme 0:846e2321c637 55 virtual void show(void) ;
Rhyme 0:846e2321c637 56
Rhyme 0:846e2321c637 57 /**
Rhyme 0:846e2321c637 58 * calibrate: caribrate the led pwm values trying to adjust the measured
Rhyme 0:846e2321c637 59 * values to the values given in target[]. Measurements are repeated
Rhyme 0:846e2321c637 60 * num_ave+2 times and the minimum and maximum values will be discarded
Rhyme 0:846e2321c637 61 * then average values are calculated using the remaining values.
Rhyme 0:846e2321c637 62 * @param target[] uint16_t target values for R, G, B measurement
Rhyme 0:846e2321c637 63 * @param result[] uint16_t calibrated pwm R,G,B values
Rhyme 0:846e2321c637 64 * @param num_ave repeat time for averaging the measurement data
Rhyme 0:846e2321c637 65 */
Rhyme 0:846e2321c637 66 void calibrate(uint16_t target[], uint16_t result[], int num_ave) ;
Rhyme 0:846e2321c637 67
Rhyme 0:846e2321c637 68 /**
Rhyme 0:846e2321c637 69 * request_calibration: set the flag to calibrate next avilable time slot
Rhyme 0:846e2321c637 70 */
Rhyme 0:846e2321c637 71 void request_calibration(void) { _calibration_request = 1 ; }
Rhyme 0:846e2321c637 72
Rhyme 0:846e2321c637 73 /**
Rhyme 0:846e2321c637 74 * calibration_requested
Rhyme 0:846e2321c637 75 * @returns if the calibration is due
Rhyme 0:846e2321c637 76 */
Rhyme 0:846e2321c637 77 int calibration_requested(void) { return _calibration_request ; }
Rhyme 0:846e2321c637 78
Rhyme 0:846e2321c637 79 /**
Rhyme 0:846e2321c637 80 * getAveColor
Rhyme 0:846e2321c637 81 * @param led[] uint16_t pwm values for R,G,B
Rhyme 0:846e2321c637 82 * @param v[] uint16_t averaged measurement value
Rhyme 0:846e2321c637 83 * @param num_ave int measurment repeat time for averaging
Rhyme 0:846e2321c637 84 */
Rhyme 0:846e2321c637 85 void getAveColor(uint16_t led[], uint16_t v[], int num_ave) ;
Rhyme 0:846e2321c637 86
Rhyme 0:846e2321c637 87 /**
Rhyme 0:846e2321c637 88 * getRGB
Rhyme 0:846e2321c637 89 * @param v[] uint16_t measured R,G,B values
Rhyme 0:846e2321c637 90 * @returns 0: success non-0: failure
Rhyme 0:846e2321c637 91 */
Rhyme 0:846e2321c637 92 int getRGB(uint16_t v[]) ;
Rhyme 0:846e2321c637 93
Rhyme 0:846e2321c637 94 /**
Rhyme 0:846e2321c637 95 * getConfig
Rhyme 0:846e2321c637 96 * @returns config this value is used to trigger VEML6040 measurement
Rhyme 0:846e2321c637 97 */
Rhyme 0:846e2321c637 98 uint8_t getConfig(void) { return _sensor_config ; }
Rhyme 0:846e2321c637 99
Rhyme 0:846e2321c637 100 /**
Rhyme 0:846e2321c637 101 * setConfig
Rhyme 0:846e2321c637 102 * @param config uint8_t 8bit value to use trigger VEML6040 measurement
Rhyme 0:846e2321c637 103 */
Rhyme 0:846e2321c637 104 void setConfig(uint8_t config) { _sensor_config = config ; }
Rhyme 0:846e2321c637 105
Rhyme 0:846e2321c637 106 /**
Rhyme 0:846e2321c637 107 * get_pwm_period
Rhyme 0:846e2321c637 108 * @returns pwm_period in us
Rhyme 0:846e2321c637 109 */
Rhyme 0:846e2321c637 110 uint16_t get_pwm_period(void) { return _pwm_period ; }
Rhyme 0:846e2321c637 111
Rhyme 0:846e2321c637 112 /**
Rhyme 0:846e2321c637 113 * set_pwm_period
Rhyme 0:846e2321c637 114 * @param pwm_period uint16_t pwm period in us
Rhyme 0:846e2321c637 115 */
Rhyme 0:846e2321c637 116 void set_pwm_period(uint16_t period) { _pwm_period = period ; }
Rhyme 0:846e2321c637 117
Rhyme 0:846e2321c637 118 /**
Rhyme 0:846e2321c637 119 * get_pwm_target
Rhyme 0:846e2321c637 120 * @returns measurment target value controlled by the pwm
Rhyme 0:846e2321c637 121 */
Rhyme 0:846e2321c637 122 uint16_t get_pwm_target(void) { return _pwm_target ; }
Rhyme 0:846e2321c637 123
Rhyme 0:846e2321c637 124 /**
Rhyme 0:846e2321c637 125 * set_pwm_target
Rhyme 0:846e2321c637 126 * @param target uint16_t measurement target value
Rhyme 0:846e2321c637 127 */
Rhyme 0:846e2321c637 128 void set_pwm_target(uint16_t target) { _pwm_target = target ; }
Rhyme 0:846e2321c637 129
Rhyme 0:846e2321c637 130 /**
Rhyme 0:846e2321c637 131 * getR
Rhyme 0:846e2321c637 132 * @returns measured value of R
Rhyme 0:846e2321c637 133 */
Rhyme 0:846e2321c637 134 uint16_t getR(void) { return _value[0] ; }
Rhyme 0:846e2321c637 135
Rhyme 0:846e2321c637 136 /**
Rhyme 0:846e2321c637 137 * getG
Rhyme 0:846e2321c637 138 * @returns measured value of G
Rhyme 0:846e2321c637 139 */
Rhyme 0:846e2321c637 140 uint16_t getG(void) { return _value[1] ; }
Rhyme 0:846e2321c637 141
Rhyme 0:846e2321c637 142 /**
Rhyme 0:846e2321c637 143 * getB
Rhyme 0:846e2321c637 144 * @returns measured value of B
Rhyme 0:846e2321c637 145 */
Rhyme 0:846e2321c637 146 uint16_t getB(void) { return _value[2] ; }
Rhyme 0:846e2321c637 147
Rhyme 0:846e2321c637 148 /**
Rhyme 0:846e2321c637 149 * getPwmR
Rhyme 0:846e2321c637 150 * @returns PWM value of R LED
Rhyme 0:846e2321c637 151 */
Rhyme 0:846e2321c637 152 uint16_t getPwmR(void) { return _pwm[0] ; }
Rhyme 0:846e2321c637 153
Rhyme 0:846e2321c637 154 /**
Rhyme 0:846e2321c637 155 * setPwmR
Rhyme 0:846e2321c637 156 * @param pwm_r
Rhyme 0:846e2321c637 157 */
Rhyme 0:846e2321c637 158 void setPwmR(uint16_t pwm_r) { _pwm[0] = pwm_r ; }
Rhyme 0:846e2321c637 159
Rhyme 0:846e2321c637 160 /**
Rhyme 0:846e2321c637 161 * getPwmG
Rhyme 0:846e2321c637 162 * @returns PWM value of G LED
Rhyme 0:846e2321c637 163 */
Rhyme 0:846e2321c637 164 uint16_t getPwmG(void) { return _pwm[1] ; }
Rhyme 0:846e2321c637 165
Rhyme 0:846e2321c637 166 /**
Rhyme 0:846e2321c637 167 * setPwmG
Rhyme 0:846e2321c637 168 * @param pwm_g
Rhyme 0:846e2321c637 169 */
Rhyme 0:846e2321c637 170 void setPwmG(uint16_t pwm_g) { _pwm[1] = pwm_g ; }
Rhyme 0:846e2321c637 171
Rhyme 0:846e2321c637 172 /**
Rhyme 0:846e2321c637 173 * getPwmB
Rhyme 0:846e2321c637 174 * @returns PWM value of B LED
Rhyme 0:846e2321c637 175 */
Rhyme 0:846e2321c637 176 uint16_t getPwmB(void) { return _pwm[2] ; }
Rhyme 0:846e2321c637 177
Rhyme 0:846e2321c637 178 /**
Rhyme 0:846e2321c637 179 * setPwmB
Rhyme 0:846e2321c637 180 * @param pwm_b
Rhyme 0:846e2321c637 181 */
Rhyme 0:846e2321c637 182 void setPwmB(uint16_t pwm_b) { _pwm[2] = pwm_b ; }
Rhyme 0:846e2321c637 183
Rhyme 0:846e2321c637 184 /**
Rhyme 0:846e2321c637 185 * setLEDs set pwm values to PwmOut pins to drive LEDS
Rhyme 0:846e2321c637 186 * @param led_value[] uint16_t pwm values for R, G, B
Rhyme 0:846e2321c637 187 */
Rhyme 0:846e2321c637 188 void setLEDs(uint16_t led_value[]) ;
Rhyme 0:846e2321c637 189
Rhyme 0:846e2321c637 190 /**
Rhyme 0:846e2321c637 191 * setLEDs set pwm values to PwmOut pins to drive LEDS
Rhyme 0:846e2321c637 192 * @param r uint16_t pwm value of R LED
Rhyme 0:846e2321c637 193 * @param g uint16_t pwm value of G LED
Rhyme 0:846e2321c637 194 * @param b uint16_t pwm value of B LED
Rhyme 0:846e2321c637 195 */
Rhyme 0:846e2321c637 196 void setLEDs(uint16_t r, uint16_t g, uint16_t b) ;
Rhyme 0:846e2321c637 197
Rhyme 0:846e2321c637 198 protected:
Rhyme 0:846e2321c637 199 VEML6040 *_sensor ;
Rhyme 0:846e2321c637 200 uint8_t _sensor_config ;
Rhyme 0:846e2321c637 201 PwmOut *_led[3] ;
Rhyme 0:846e2321c637 202 uint16_t _pwm_period ;
Rhyme 0:846e2321c637 203 uint16_t _pwm_target ;
Rhyme 0:846e2321c637 204 uint16_t _value[3] ; /* r, g, b */
Rhyme 0:846e2321c637 205 uint16_t _pwm[3] ; /* r, g, b */
Rhyme 0:846e2321c637 206 uint16_t _probe ; /* probing value for calibration */
Rhyme 0:846e2321c637 207 uint8_t _calibration_request ;
Rhyme 0:846e2321c637 208 } ;
Rhyme 0:846e2321c637 209
Rhyme 0:846e2321c637 210 extern uint16_t color0_pwm[3] ;
Rhyme 0:846e2321c637 211 extern uint16_t color1_pwm[3] ;
Rhyme 0:846e2321c637 212 extern uint16_t color0_target[3] ;
Rhyme 0:846e2321c637 213 extern uint16_t color1_target[3] ;
Rhyme 0:846e2321c637 214
Rhyme 0:846e2321c637 215 #endif /* _EDGE_COLOR_H_ */