HSV2RGB and RGB2HSV
HSV.h@1:a06dfdf279e2, 2015-10-02 (annotated)
- 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?
User | Revision | Line number | New 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 |