From 46fcc4d63c248f0001b77f38f36d4706247bbf2c Mon Sep 17 00:00:00 2001 From: localhorst Date: Sun, 10 Feb 2019 17:55:09 +0100 Subject: [PATCH] implemented adaptive brightness --- FilmLightController/lightmux.cpp | 55 +++++++++++++++++++++++++++--- FilmLightController/lightmux.h | 5 +++ FilmLightController/mainwindow.cpp | 2 ++ 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/FilmLightController/lightmux.cpp b/FilmLightController/lightmux.cpp index 6fc45ff..a3ea4a5 100644 --- a/FilmLightController/lightmux.cpp +++ b/FilmLightController/lightmux.cpp @@ -3,18 +3,27 @@ LightMux::LightMux() { temperatur = warmest_temperature; - brightness = 50; + brightness = 100; power_cold = 0; power_warm = 0; power_combined = 0; + adaptive_brightness = false; + fullCommonColor = ((warmest_temperature + coldest_temperature) / 2); + qDebug("full common color: %i\n", fullCommonColor); } void LightMux::mux(){ + if(adaptive_brightness == true){ + qDebug("adaptiv\n"); + mux_adaptiv(); + } else { + qDebug("linear\n"); + mux_linear(); + } +} - int fullCommonColor = ((warmest_temperature + coldest_temperature) / 2); - - qDebug("full common color: %i\n", fullCommonColor); +void LightMux::mux_linear() { if(temperatur == fullCommonColor){ qDebug("same as full common color\n"); @@ -50,6 +59,44 @@ void LightMux::mux(){ } +void LightMux::mux_adaptiv(){ + + if(temperatur == fullCommonColor){ + qDebug("same as full common color\n"); + power_cold = 50; + power_warm = 50; + } else if(temperatur < fullCommonColor) { + qDebug("lower as full common color\n"); + // warm led dominant + // cold led recessive + + double a = double((temperatur) - (warmest_temperature)); + double b = double((-warmest_temperature + coldest_temperature)); + double c = a / b * 100; + power_cold = static_cast(c + .5); + power_warm = 100 - power_cold; + } else if(temperatur > fullCommonColor) { + qDebug("higher as full common color\n"); + // cold led dominant + // warm led recessive + + double a = double((temperatur) - (coldest_temperature)); + double b = double((-coldest_temperature + warmest_temperature)); + double c = a / b * 100; + power_warm = static_cast(c + .5); + power_cold = 100 - power_warm; + } + + power_cold = static_cast(double(power_cold * (double(brightness/100.0))) + .5); + power_warm = static_cast(double(power_warm * (double(brightness/100.0))) + .5); + + qDebug("cold color: %i\nwarm color: %i\n", power_cold, power_warm); + + power_combined = static_cast(double(power_cold+power_warm) / 2.0); + +} + + void LightMux::decBrightness(){ brightness--; if(brightness < 0){ diff --git a/FilmLightController/lightmux.h b/FilmLightController/lightmux.h index 78b7102..30e2ad2 100644 --- a/FilmLightController/lightmux.h +++ b/FilmLightController/lightmux.h @@ -17,6 +17,8 @@ private: int power_warm; // power of the warm LEDs of Panels in percent int power_combined; //combined power of both LEDs in percent + int fullCommonColor; // color mix with both LED´s at same brightess + bool adaptive_brightness; // true indecates adaptive brightness is enabled public: @@ -48,6 +50,9 @@ public: void toogleAdaptiveBrightness(); +private: + void mux_linear(); // brightness will vary by different color temperature + void mux_adaptiv(); // same brightness by different color temperature }; #endif // LIGHTMUX_H diff --git a/FilmLightController/mainwindow.cpp b/FilmLightController/mainwindow.cpp index c37cbde..685e566 100644 --- a/FilmLightController/mainwindow.cpp +++ b/FilmLightController/mainwindow.cpp @@ -114,4 +114,6 @@ void MainWindow::on_lineTemperature_returnPressed() void MainWindow::on_checkBox_stateChanged() { lmux->toogleAdaptiveBrightness(); + lmux->mux(); + updateUI(); }