HSV2RGB and RGB2HSV

Dependents:   RGB_Matrix_Test

Committer:
JackB
Date:
Fri Oct 02 22:29:47 2015 +0000
Revision:
1:a06dfdf279e2
Parent:
0:e3c23a157dee
Adafruit 64x32 RGB LED Matrix - 3mm pitch Demo program for Nucleo F446RE.; Use User button to display color palette in second framebuffer.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JackB 0:e3c23a157dee 1 /* mbed HSV Library
JackB 0:e3c23a157dee 2 * Copyright (c) 2013-2013 JackB, cstyles
JackB 0:e3c23a157dee 3 *
JackB 0:e3c23a157dee 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
JackB 0:e3c23a157dee 5 * of this software and associated documentation files (the "Software"), to deal
JackB 0:e3c23a157dee 6 * in the Software without restriction, including without limitation the rights
JackB 0:e3c23a157dee 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
JackB 0:e3c23a157dee 8 * copies of the Software, and to permit persons to whom the Software is
JackB 0:e3c23a157dee 9 * furnished to do so, subject to the following conditions:
JackB 0:e3c23a157dee 10 *
JackB 0:e3c23a157dee 11 * The above copyright notice and this permission notice shall be included in
JackB 0:e3c23a157dee 12 * all copies or substantial portions of the Software.
JackB 0:e3c23a157dee 13 *
JackB 0:e3c23a157dee 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
JackB 0:e3c23a157dee 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
JackB 0:e3c23a157dee 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
JackB 0:e3c23a157dee 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
JackB 0:e3c23a157dee 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
JackB 0:e3c23a157dee 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
JackB 0:e3c23a157dee 20 * THE SOFTWARE.
JackB 0:e3c23a157dee 21 */
JackB 0:e3c23a157dee 22
JackB 0:e3c23a157dee 23 #ifndef MBED_HSV_H
JackB 0:e3c23a157dee 24 #define MBED_HSV_H
JackB 0:e3c23a157dee 25
JackB 0:e3c23a157dee 26 #include "mbed.h"
JackB 0:e3c23a157dee 27 #include "math.h"
JackB 0:e3c23a157dee 28
JackB 0:e3c23a157dee 29 /** HSV calculation class
JackB 0:e3c23a157dee 30 *
JackB 0:e3c23a157dee 31 * Example:
JackB 0:e3c23a157dee 32 * @code
JackB 0:e3c23a157dee 33 * // Continuously sweep the hsv through it's full range
JackB 0:e3c23a157dee 34 * #include "mbed.h"
JackB 0:e3c23a157dee 35 * #include "HSV.h"
JackB 0:e3c23a157dee 36 *
JackB 0:e3c23a157dee 37 * HSV myhsv(LED1,LED2,LED3);
JackB 0:e3c23a157dee 38 *
JackB 0:e3c23a157dee 39 * int main() {
JackB 0:e3c23a157dee 40 * myhsv.SetS(1.0);
JackB 0:e3c23a157dee 41 * myhsv.SetV(1.0);
JackB 0:e3c23a157dee 42 * while(1) {
JackB 0:e3c23a157dee 43 * for(int i=0; i<100; i++) {
JackB 0:e3c23a157dee 44 * myhsv.SetH((float)i/100.0);
JackB 0:e3c23a157dee 45 * myhsv.HSV_to_RGB();
JackB 0:e3c23a157dee 46 * wait(0.01);
JackB 0:e3c23a157dee 47 * }
JackB 0:e3c23a157dee 48 * }
JackB 0:e3c23a157dee 49 * }
JackB 0:e3c23a157dee 50 * @endcode
JackB 0:e3c23a157dee 51 */
JackB 0:e3c23a157dee 52
JackB 0:e3c23a157dee 53 #define MAXHUE 4095 // 49152/6=8192 (65536/6=10922.7)
JackB 0:e3c23a157dee 54 #define MAXVAL 4095
JackB 0:e3c23a157dee 55
JackB 0:e3c23a157dee 56 class HSV {
JackB 0:e3c23a157dee 57
JackB 0:e3c23a157dee 58 public:
JackB 0:e3c23a157dee 59 struct RgbStruct
JackB 0:e3c23a157dee 60 {
JackB 0:e3c23a157dee 61 float R, G, B, W;
JackB 0:e3c23a157dee 62 float Rcf, Gcf, Bcf, Wcf;
JackB 0:e3c23a157dee 63 float Out;
JackB 0:e3c23a157dee 64 };
JackB 0:e3c23a157dee 65 struct RgbStruct Rgb;
JackB 0:e3c23a157dee 66 struct HsvStruct
JackB 0:e3c23a157dee 67 {
JackB 0:e3c23a157dee 68 float H, S, V, P;
JackB 0:e3c23a157dee 69 };
JackB 0:e3c23a157dee 70 struct HsvStruct Hsv;
JackB 0:e3c23a157dee 71 struct HsvStruct Hsv2;
JackB 0:e3c23a157dee 72
JackB 0:e3c23a157dee 73 /** Create a hsv object
JackB 0:e3c23a157dee 74 *
JackB 0:e3c23a157dee 75 * @param void
JackB 0:e3c23a157dee 76 */
JackB 0:e3c23a157dee 77 HSV();
JackB 0:e3c23a157dee 78
JackB 0:e3c23a157dee 79 void SetPower(bool Power);
JackB 0:e3c23a157dee 80
JackB 0:e3c23a157dee 81 int UseWeb(char* String);
JackB 0:e3c23a157dee 82 int UseRGB(int R, int G, int B);
JackB 0:e3c23a157dee 83 int UseHSV(float H, float S, float V);
JackB 0:e3c23a157dee 84
JackB 0:e3c23a157dee 85 void SetRcf(float Rcf);
JackB 0:e3c23a157dee 86 void SetGcf(float Gcf);
JackB 0:e3c23a157dee 87 void SetBcf(float Bcf);
JackB 0:e3c23a157dee 88 void SetWcf(float Wcf);
JackB 0:e3c23a157dee 89
JackB 0:e3c23a157dee 90 /** Set the hue value, normalised to it's full range
JackB 0:e3c23a157dee 91 *
JackB 0:e3c23a157dee 92 * @param Hue normalised number 0.0-1.0 to represent the full range.
JackB 0:e3c23a157dee 93 */
JackB 0:e3c23a157dee 94 void SetH(float Hue);
JackB 0:e3c23a157dee 95
JackB 0:e3c23a157dee 96 /** Set the saturation value, normalised to it's full range
JackB 0:e3c23a157dee 97 *
JackB 0:e3c23a157dee 98 * @param Saturation normalised number 0.0-1.0 to represent the full range.
JackB 0:e3c23a157dee 99 */
JackB 0:e3c23a157dee 100 void SetS(float Saturation);
JackB 0:e3c23a157dee 101
JackB 0:e3c23a157dee 102 /** Set the brightness value, normalised to it's full range
JackB 0:e3c23a157dee 103 *
JackB 0:e3c23a157dee 104 * @param Value normalised number 0.0-1.0 to represent the full range.
JackB 0:e3c23a157dee 105 */
JackB 0:e3c23a157dee 106 void SetV(float Value);
JackB 1:a06dfdf279e2 107 void SetVV(float Value);
JackB 0:e3c23a157dee 108 void SetP(float Value);
JackB 0:e3c23a157dee 109
JackB 0:e3c23a157dee 110 /** Set the white value, normalised to it's full range
JackB 0:e3c23a157dee 111 *
JackB 0:e3c23a157dee 112 * @param Value normalised number 0.0-1.0 to represent the full range.
JackB 0:e3c23a157dee 113 */
JackB 0:e3c23a157dee 114 void SetW(float Value);
JackB 0:e3c23a157dee 115
JackB 0:e3c23a157dee 116 uint16_t GetRout(void);
JackB 0:e3c23a157dee 117 uint16_t GetGout(void);
JackB 0:e3c23a157dee 118 uint16_t GetBout(void);
JackB 0:e3c23a157dee 119 uint16_t GetWout(void);
JackB 0:e3c23a157dee 120
JackB 0:e3c23a157dee 121 /** Get the red value, normalised to it's full range
JackB 0:e3c23a157dee 122 *
JackB 0:e3c23a157dee 123 * @param void
JackB 0:e3c23a157dee 124 */
JackB 0:e3c23a157dee 125 float GetR(void);
JackB 0:e3c23a157dee 126
JackB 0:e3c23a157dee 127 /** Get the green value, normalised to it's full range
JackB 0:e3c23a157dee 128 *
JackB 0:e3c23a157dee 129 * @param void
JackB 0:e3c23a157dee 130 */
JackB 0:e3c23a157dee 131 float GetG(void);
JackB 0:e3c23a157dee 132
JackB 0:e3c23a157dee 133 /** Get the blue value, normalised to it's full range
JackB 0:e3c23a157dee 134 *
JackB 0:e3c23a157dee 135 * @param void
JackB 0:e3c23a157dee 136 */
JackB 0:e3c23a157dee 137 float GetB(void);
JackB 0:e3c23a157dee 138
JackB 0:e3c23a157dee 139 /** Get the white value, normalised to it's full range
JackB 0:e3c23a157dee 140 *
JackB 0:e3c23a157dee 141 * @param void
JackB 0:e3c23a157dee 142 */
JackB 0:e3c23a157dee 143 float GetW(void);
JackB 0:e3c23a157dee 144
JackB 0:e3c23a157dee 145 float GetH(void);
JackB 0:e3c23a157dee 146 float GetS(void);
JackB 0:e3c23a157dee 147 float GetV(void);
JackB 0:e3c23a157dee 148 float GetH2(void);
JackB 0:e3c23a157dee 149 float GetS2(void);
JackB 0:e3c23a157dee 150 float GetV2(void);
JackB 0:e3c23a157dee 151
JackB 0:e3c23a157dee 152 /** Calculate the red, green, and blue value
JackB 0:e3c23a157dee 153 *
JackB 0:e3c23a157dee 154 * @param void
JackB 0:e3c23a157dee 155 */
JackB 0:e3c23a157dee 156 void HSV_to_RGB(void);
JackB 0:e3c23a157dee 157
JackB 0:e3c23a157dee 158 void RGB_to_HSV(void);
JackB 0:e3c23a157dee 159
JackB 0:e3c23a157dee 160 private:
JackB 0:e3c23a157dee 161 bool _Power;
JackB 0:e3c23a157dee 162 // PwmOut _pin1;
JackB 0:e3c23a157dee 163 // PwmOut _pin2;
JackB 0:e3c23a157dee 164 // PwmOut _pin3;
JackB 0:e3c23a157dee 165 // PwmOut _pin4;
JackB 0:e3c23a157dee 166 //protected:
JackB 0:e3c23a157dee 167 // PwmOut _pwm;
JackB 0:e3c23a157dee 168 // float _range;
JackB 0:e3c23a157dee 169 // float _degrees;
JackB 0:e3c23a157dee 170 // float _p;
JackB 0:e3c23a157dee 171 };
JackB 0:e3c23a157dee 172
JackB 0:e3c23a157dee 173 #endif
JackB 0:e3c23a157dee 174