mode_white.ino 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //Initialize the values of white mode to default runtime
  2. void loadWhiteModeDefault() {
  3. values[0] = 5000; //5000K
  4. values[1] = MAX_BRIGHTNESS / 2; //Half power
  5. values[2] = 0;
  6. adjustingCatergory = 0;
  7. setColorTemperature(5000, MAX_BRIGHTNESS / 2);
  8. //Set ctrl LED to low brightness white
  9. setControlLEDColor(MAX_CTRLBRIGHTNESS, MAX_CTRLBRIGHTNESS, MAX_CTRLBRIGHTNESS);
  10. }
  11. //Set color temperature set the LED RGB Values based on given temperature K value and brigheness level (0 - 255)
  12. void setColorTemperature(int temperatureK, int brightnessLevel) {
  13. // Check if brightness is within the valid range [0, 1]
  14. if (brightnessLevel > MAX_BRIGHTNESS) {
  15. brightnessLevel = MAX_BRIGHTNESS;
  16. } else if (brightnessLevel < 0) {
  17. brightnessLevel = 0;
  18. }
  19. //Normalize the brightness value
  20. double brightness = float(brightnessLevel) / 255.0;
  21. double normalizedTemperature = (log(temperatureK) - 8.79) / 1.8;
  22. int red = 0;
  23. int green = 0;
  24. int blue = 0;
  25. normalizedTemperature = constrain(normalizedTemperature, -1.0, 1.0);
  26. //Handle Red and Green channels
  27. if (normalizedTemperature <= 0) {
  28. red = 255;
  29. green = int(255 * (-0.402 * normalizedTemperature * normalizedTemperature * normalizedTemperature - 0.211 * normalizedTemperature * normalizedTemperature + 1.09 * normalizedTemperature + 0.958));
  30. } else {
  31. red = int(255 * (-0.990 * normalizedTemperature * normalizedTemperature * normalizedTemperature + 2.34 * normalizedTemperature * normalizedTemperature - 1.99 * normalizedTemperature + 0.970));
  32. green = int(255 * (-0.542 * normalizedTemperature * normalizedTemperature * normalizedTemperature + 1.37 * normalizedTemperature * normalizedTemperature - 1.28 * normalizedTemperature + 0.941));
  33. }
  34. //Blue channel
  35. if (normalizedTemperature <= -0.7) {
  36. blue = int(0);
  37. } else if (normalizedTemperature <= 0.0) {
  38. blue = int(255 * (0.0117 * normalizedTemperature * normalizedTemperature * normalizedTemperature + 2.05 * normalizedTemperature * normalizedTemperature + 2.85 * normalizedTemperature + 1.00));
  39. } else {
  40. blue = int(255 * (1.0));
  41. }
  42. //Scale it down to target brightness level
  43. red = red * brightness;
  44. green = green * brightness;
  45. blue = blue * brightness;
  46. //Make sure non of the values goes over 255
  47. if (red > 255){
  48. red = 255;
  49. }
  50. //Green usually wont go over 255
  51. if (blue > 255){
  52. blue = 255;
  53. }
  54. Serial.println(red);
  55. Serial.println(green);
  56. Serial.println(blue);
  57. //Set all the LEDs to desired color temperature
  58. setLightColor(red, green, blue);
  59. }