2021-01-29 06:31:58 -05:00
|
|
|
#pragma once
|
|
|
|
//
|
|
|
|
// FILE: Kelvin2RGB.h
|
|
|
|
// AUTHOR: Rob Tillaart
|
2021-11-06 10:56:44 -04:00
|
|
|
// VERSION: 0.1.3
|
2021-01-29 06:31:58 -05:00
|
|
|
// DATE: 2018-01-31
|
|
|
|
// PURPOSE: Arduino library for converting temperature to RGB values
|
|
|
|
// URL: https://github.com/RobTillaart/Kelvin2RGB
|
|
|
|
//
|
|
|
|
|
|
|
|
|
2021-11-06 10:56:44 -04:00
|
|
|
#define KELVIN2RGB_LIB_VERSION (F("0.1.3"))
|
2021-01-29 06:31:58 -05:00
|
|
|
|
2021-06-02 07:46:05 -04:00
|
|
|
#include "Arduino.h"
|
2021-01-29 06:31:58 -05:00
|
|
|
|
|
|
|
|
2021-06-02 07:46:05 -04:00
|
|
|
//
|
|
|
|
// Based upon article Tanner Helland and Neil Bartlett
|
|
|
|
// http://www.tannerhelland.com/4435/convert-temperature-rgb-algorithm-code/
|
2021-11-06 10:56:44 -04:00
|
|
|
// http://www.zombieprototypes.com/?p=210
|
2021-06-02 07:46:05 -04:00
|
|
|
// https://en.wikipedia.org/wiki/Color_temperature#Categorizing_different_lighting
|
|
|
|
//
|
2021-01-29 06:31:58 -05:00
|
|
|
//
|
|
|
|
// based on https://en.wikipedia.org/wiki/Color_temperature#Categorizing_different_lighting
|
|
|
|
//
|
|
|
|
// DAY LIGHT SETTING TEMPERATURE
|
|
|
|
//
|
|
|
|
#define DLS_dark 0
|
|
|
|
#define DLS_match 1700
|
|
|
|
#define DLS_sodiumLamp 1700
|
|
|
|
#define DLS_candleFlame 1850
|
|
|
|
#define DLS_sunrise 1850
|
|
|
|
#define DLS_sunset 1850
|
|
|
|
#define DLS_bulb 2400
|
|
|
|
#define DLS_bulbSoftWhite 2550
|
|
|
|
#define DLS_LEDlamp 2700
|
|
|
|
#define DLS_warmWhite 3000
|
|
|
|
#define DLS_studioLight 3200
|
|
|
|
#define DLS_studioCPlight 3350
|
|
|
|
#define DLS_daylightHorizon 5000
|
|
|
|
#define DLS_flashLight 5700
|
|
|
|
#define DLS_xenonLight 6200
|
|
|
|
#define DLS_dayLightBright 6500
|
|
|
|
#define DLS_normal 6500
|
|
|
|
#define DLS_screenlow 6500
|
|
|
|
#define DLS_screenMed 8000
|
|
|
|
#define DLS_screenHigh 9500
|
|
|
|
#define DLS_polewardSky0 15000
|
|
|
|
#define DLS_polewardSky1 19000
|
|
|
|
#define DLS_polewardSky2 23000
|
|
|
|
#define DLS_polewardSky3 27000
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Kelvin2RGB
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
Kelvin2RGB();
|
2021-11-06 10:56:44 -04:00
|
|
|
|
2021-06-02 07:46:05 -04:00
|
|
|
void begin(); // empty function - obsolete?
|
2021-11-06 10:56:44 -04:00
|
|
|
void reset();
|
|
|
|
|
|
|
|
// temp = 0..65500 brightness = 0.0 .. 100.0%
|
2021-01-29 06:31:58 -05:00
|
|
|
void convert_TH(float temperature, float brightness = 100);
|
|
|
|
void convert_NB(float temperature, float brightness = 100);
|
|
|
|
|
|
|
|
float temperature() { return _temperature; };
|
|
|
|
float brightness() { return _brightness; };
|
|
|
|
|
2021-11-06 10:56:44 -04:00
|
|
|
// returns 0.0 .. 1.0
|
2021-06-02 07:46:05 -04:00
|
|
|
float red() { return _red; };
|
|
|
|
float green() { return _green; };
|
|
|
|
float blue() { return _blue; };
|
|
|
|
|
2021-11-06 10:56:44 -04:00
|
|
|
// red, green, blue should be in 0 .. 1.0 range
|
|
|
|
// brightness should be in 0..100%, Default = 100%,
|
|
|
|
// returns RGB.
|
|
|
|
uint32_t setRGB(float red, float green, float blue, float brightness = 100);
|
|
|
|
|
|
|
|
uint32_t RGB() { return _rgb; }; // 32 bit colour
|
|
|
|
uint16_t RGB565(); // 16 bit colour
|
|
|
|
|
|
|
|
// experimental 0.1.3
|
|
|
|
uint32_t CMYK();
|
|
|
|
uint32_t BGR();
|
|
|
|
|
2021-06-02 07:46:05 -04:00
|
|
|
|
2021-01-29 06:31:58 -05:00
|
|
|
private:
|
2021-06-02 07:46:05 -04:00
|
|
|
void _normalize();
|
|
|
|
|
2021-11-06 10:56:44 -04:00
|
|
|
float _temperature = 0;
|
|
|
|
float _brightness = 0;
|
|
|
|
float _red = 0;
|
|
|
|
float _green = 0;
|
|
|
|
float _blue = 0;
|
|
|
|
uint32_t _rgb = 0;
|
2021-01-29 06:31:58 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
// -- END OF FILE --
|