Spidey Wall is the name for a physical wall lit up by multiple addressable LED strips. This program is an LPC1768 web server to control the wall from a browser.

Dependencies:   EthernetInterfacePlusHostname RdWebServer mbed-rtos mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers colourconverters.cpp Source File

colourconverters.cpp

00001 #include "colourconverters.h"
00002 
00003 void HsvToRgb(HsvColor hsv, RgbColor& rgb)
00004 {
00005     unsigned char region, remainder, p, q, t;
00006 
00007     if (hsv.s == 0)
00008     {
00009         rgb.r = hsv.v;
00010         rgb.g = hsv.v;
00011         rgb.b = hsv.v;
00012         return;
00013     }
00014 
00015     region = hsv.h / 43;
00016     remainder = (hsv.h - (region * 43)) * 6; 
00017 
00018     p = (hsv.v * (255 - hsv.s)) >> 8;
00019     q = (hsv.v * (255 - ((hsv.s * remainder) >> 8))) >> 8;
00020     t = (hsv.v * (255 - ((hsv.s * (255 - remainder)) >> 8))) >> 8;
00021 
00022     switch (region)
00023     {
00024         case 0:
00025             rgb.r = hsv.v; rgb.g = t; rgb.b = p;
00026             break;
00027         case 1:
00028             rgb.r = q; rgb.g = hsv.v; rgb.b = p;
00029             break;
00030         case 2:
00031             rgb.r = p; rgb.g = hsv.v; rgb.b = t;
00032             break;
00033         case 3:
00034             rgb.r = p; rgb.g = q; rgb.b = hsv.v;
00035             break;
00036         case 4:
00037             rgb.r = t; rgb.g = p; rgb.b = hsv.v;
00038             break;
00039         default:
00040             rgb.r = hsv.v; rgb.g = p; rgb.b = q;
00041             break;
00042     }
00043 }
00044 
00045 void RgbToHsv(RgbColor rgb, HsvColor& hsv)
00046 {
00047     unsigned char rgbMin, rgbMax;
00048 
00049     rgbMin = rgb.r < rgb.g ? (rgb.r < rgb.b ? rgb.r : rgb.b) : (rgb.g < rgb.b ? rgb.g : rgb.b);
00050     rgbMax = rgb.r > rgb.g ? (rgb.r > rgb.b ? rgb.r : rgb.b) : (rgb.g > rgb.b ? rgb.g : rgb.b);
00051 
00052     hsv.v = rgbMax;
00053     if (hsv.v == 0)
00054     {
00055         hsv.h = 0;
00056         hsv.s = 0;
00057         return;
00058     }
00059 
00060     hsv.s = 255 * long(rgbMax - rgbMin) / hsv.v;
00061     if (hsv.s == 0)
00062     {
00063         hsv.h = 0;
00064         return;
00065     }
00066 
00067     if (rgbMax == rgb.r)
00068         hsv.h = 0 + 43 * (rgb.g - rgb.b) / (rgbMax - rgbMin);
00069     else if (rgbMax == rgb.g)
00070         hsv.h = 85 + 43 * (rgb.b - rgb.r) / (rgbMax - rgbMin);
00071     else
00072         hsv.h = 171 + 43 * (rgb.r - rgb.g) / (rgbMax - rgbMin);
00073 }