Added a GPIO to power on/off for external I2C sensor(s) (with LEDs)
Dependencies: UniGraphic mbed vt100
18-Jun-2018 外部センサの電源オン・オフ機能は下位互換の為に無効になっていました。 この版で再度有効にしました。
edge_sensor/edge_color.h@0:846e2321c637, 2018-04-13 (annotated)
- 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?
User | Revision | Line number | New 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_ */ |