Der Slider ist eine einfache Integer-Variable mit entsprechendem Variablenprofil. Als Aktionsskript habe ich ein Skript, dass dann den Wert (0 - 1023) über die Serielle Schnittstelle an den JeeLink sendet.
Die Farbumrechnung findet dann im µC statt.
Ich habe die Umrechnung mal in ein PHP Script gebaut - ich hoffe es funktioniert so weit, musste nämlich eine map-funktion, wie es sie bei Arduino gibt erst nachstellen. (bei colorVal einen Wert zwischen 0 und 1023 eingeben und am ende gibt das Skript die RGB Werte aus - die Farben entsprechen der Farbleiste aus dem o.g. Blog)
Ursprünglich hatte ich vor eine Image map über die Farbleiste zu legen und dann mit einem POST Befehl die zugehörigen Werte aus der Farbleiste beim Klick auf eine bestimmte Farbe auszuwerten. Das alles sollte dann in eine HTMLBox - ich weiß aber nicht ob aus der HTMLBox auch POST-Befehle gesendet werden können.
Bin aber bisher nicht dazu gekommen, und die Lösung mit der Slider-Variablen ist auch ganz praktikabel - auch wenn es natürlich besser geht.
<?
$colorVal = 550;
// RED > ORANGE > YELLOW
if ($colorVal >= 0 && $colorVal <= 170) {
$redPwr = 255;
$bluePwr = 0;
$greenPwr = map($colorVal, 0, 170, 0, 255);
}
// YELLOW > LIME?? > GREEN
if ($colorVal > 170 && $colorVal <= 341) {
$greenPwr = 255;
$bluePwr = 0;
$redPwr = map($colorVal, 341, 170, 0, 255);
}
// GREEN > TURQOUISE
if ($colorVal > 341 && $colorVal <= 511) {
$greenPwr = 255;
$redPwr = 0;
$bluePwr = map($colorVal, 341, 511, 0, 255);
}
// TURQOUISE > BLUE
if ($colorVal > 511 && $colorVal <= 682) {
$bluePwr = 255;
$redPwr = 0;
$greenPwr = map($colorVal, 682, 511, 0, 255);
}
// BLUE > PURPLE
if ($colorVal > 682 && $colorVal <= 852) {
$bluePwr = 255;
$greenPwr = 0;
$redPwr = map($colorVal, 682, 852, 0, 255);
}
// PURPLE > RED
if ($colorVal > 852 && $colorVal <= 1023) {
$redPwr = 255;
$greenPwr = 0;
$bluePwr = map($colorVal, 1023, 852, 0, 255);
}
echo "R ".$redPwr."
";
echo "G ".$greenPwr."
";
echo "B ".$bluePwr."
";
function map($Value, $min, $max, $new_min, $new_max)
{
$range = $max - $min;
$new_range = $new_max - $new_min;
$scaling = $new_range / $range;
$new_Value = round(($Value - $min)*$scaling);
if ($range < 0)
{
$new_Value = round(($Value - $max)*$scaling);
$new_Value = $new_max + $new_Value;
}
//if ($new_Value > $new_max) $new_Value = $new_max;
//if ($new_Value < $new_min) $new_Value = $new_min;
return $new_Value;
}
?>