added resistance for Driver-Board

This commit is contained in:
Hendrik Schutter 2019-02-16 20:35:00 +01:00
parent 46fcc4d63c
commit beff439810
5 changed files with 137 additions and 45 deletions

View File

@ -10,71 +10,98 @@ LightMux::LightMux()
adaptive_brightness = false; adaptive_brightness = false;
fullCommonColor = ((warmest_temperature + coldest_temperature) / 2); fullCommonColor = ((warmest_temperature + coldest_temperature) / 2);
qDebug("full common color: %i\n", fullCommonColor); qDebug("full common color: %i\n", fullCommonColor);
cold_resistance_range.low = 100.0;
cold_resistance_range.high = 900.0;
warm_resistance_range.low = 100.0;
warm_resistance_range.high = 900.0;
} }
void LightMux::mux(){ void LightMux::mux(){
struct powermix mixed;
if(adaptive_brightness == true){ if(adaptive_brightness == true){
qDebug("adaptiv\n"); qDebug("adaptiv\n");
mux_adaptiv(); mixed = mux_adaptiv();
} else { } else {
qDebug("linear\n"); qDebug("linear\n");
mux_linear(); mixed = mux_linear();
}
}
void LightMux::mux_linear() {
if(temperatur == fullCommonColor){
qDebug("same as full common color\n");
power_cold = 100;
power_warm = 100;
} else if(temperatur < fullCommonColor) {
qDebug("lower as full common color\n");
// warm led dominant
// cold led recessive
power_warm = 100;
double a = double(((temperatur * (power_warm/100)) - ((power_warm/100) * warmest_temperature)));
double b = double((coldest_temperature - temperatur));
double c = a / b * 100;
power_cold = static_cast<int>(c + .5);
} else if(temperatur > fullCommonColor) {
qDebug("higher as full common color\n");
// cold led dominant
// warm led recessive
power_cold = 100;
double a = double(((temperatur * (power_cold/100)) - ((power_cold/100) * coldest_temperature)));
double b = double((warmest_temperature - temperatur));
double c = a / b * 100;
power_warm = static_cast<int>(c + .5);
} }
power_cold = static_cast<int>(double(power_cold * (double(brightness/100.0))) + .5); power_cold = static_cast<int>(double(mixed.cold * (double(brightness/100.0))) + .5);
power_warm = static_cast<int>(double(power_warm * (double(brightness/100.0))) + .5); power_warm = static_cast<int>(double(mixed.warm * (double(brightness/100.0))) + .5);
qDebug("cold color: %i\nwarm color: %i\n", power_cold, power_warm); qDebug("cold color: %i\nwarm color: %i\n", power_cold, power_warm);
power_combined = static_cast<int>(double(power_cold+power_warm) / 2.0); power_combined = static_cast<int>(double(power_cold+power_warm) / 2.0);
resistance_cold = static_cast<int>(double(map(power_cold, 0.0, 100.0, cold_resistance_range.low, cold_resistance_range.high)));
resistance_warm = static_cast<int>(double(map(power_warm, 0.0, 100.0, warm_resistance_range.low, warm_resistance_range.high)));
}
struct LightMux::powermix LightMux::mux_linear() {
struct powermix tmp;
if(temperatur == fullCommonColor){
qDebug("same as full common color\n");
tmp.cold = 100;
tmp.warm = 100;
} else if(temperatur < fullCommonColor) {
qDebug("lower as full common color\n");
// warm led dominant
// cold led recessive
tmp.warm = 100;
double a = double(((temperatur * (tmp.warm/100)) - ((tmp.warm/100) * warmest_temperature)));
double b = double((coldest_temperature - temperatur));
double c = a / b * 100;
tmp.cold = static_cast<int>(c + .5);
} else if(temperatur > fullCommonColor) {
qDebug("higher as full common color\n");
// cold led dominant
// warm led recessive
tmp.cold = 100;
double a = double(((temperatur * (tmp.cold/100)) - ((tmp.cold/100) * coldest_temperature)));
double b = double((warmest_temperature - temperatur));
double c = a / b * 100;
tmp.warm = static_cast<int>(c + .5);
}
return tmp;
} }
void LightMux::mux_adaptiv(){ struct LightMux::powermix LightMux::mux_adaptiv(){
struct powermix tmp;
if(temperatur == fullCommonColor){ if(temperatur == fullCommonColor){
qDebug("same as full common color\n"); qDebug("same as full common color\n");
power_cold = 50; power_cold = 50;
power_warm = 50; power_warm = 50;
tmp.cold = 50;
tmp.warm = 50;
} else if(temperatur < fullCommonColor) { } else if(temperatur < fullCommonColor) {
qDebug("lower as full common color\n"); qDebug("lower as full common color\n");
// warm led dominant // warm led dominant
// cold led recessive // cold led recessive
double a = double((temperatur) - (warmest_temperature)); double a = double((temperatur) - (warmest_temperature));
double b = double((-warmest_temperature + coldest_temperature)); double b = double((-warmest_temperature + coldest_temperature));
double c = a / b * 100; double c = a / b * 100;
power_cold = static_cast<int>(c + .5); tmp.cold = static_cast<int>(c + .5);
power_warm = 100 - power_cold; tmp.warm = 100 - tmp.cold;
} else if(temperatur > fullCommonColor) { } else if(temperatur > fullCommonColor) {
qDebug("higher as full common color\n"); qDebug("higher as full common color\n");
// cold led dominant // cold led dominant
@ -83,16 +110,11 @@ void LightMux::mux_adaptiv(){
double a = double((temperatur) - (coldest_temperature)); double a = double((temperatur) - (coldest_temperature));
double b = double((-coldest_temperature + warmest_temperature)); double b = double((-coldest_temperature + warmest_temperature));
double c = a / b * 100; double c = a / b * 100;
power_warm = static_cast<int>(c + .5); tmp.warm = static_cast<int>(c + .5);
power_cold = 100 - power_warm; tmp.cold = 100 - tmp.warm;
} }
power_cold = static_cast<int>(double(power_cold * (double(brightness/100.0))) + .5); return tmp;
power_warm = static_cast<int>(double(power_warm * (double(brightness/100.0))) + .5);
qDebug("cold color: %i\nwarm color: %i\n", power_cold, power_warm);
power_combined = static_cast<int>(double(power_cold+power_warm) / 2.0);
} }
@ -184,6 +206,10 @@ void LightMux::toogleAdaptiveBrightness(){
} }
} }
double LightMux::map(double value, double fromLow, double fromHigh, double toLow, double toHigh){
return toLow + (toHigh - toLow) * ((value - fromLow) / (fromHigh - fromLow));
}
int LightMux::getBrightness(){ int LightMux::getBrightness(){
return brightness; return brightness;
} }
@ -211,3 +237,11 @@ int LightMux::getPowerWarm(){
int LightMux::getPowerCombined(){ int LightMux::getPowerCombined(){
return power_combined; return power_combined;
} }
int LightMux::getResistanceCold(){
return resistance_cold;
}
int LightMux::getResistanceWarm(){
return resistance_warm;
}

View File

@ -6,6 +6,16 @@ class LightMux
{ {
private: private:
struct range {
double low;
double high;
};
struct powermix {
int cold;
int warm;
};
int brightness; // total power of the LED Panels (both colors) in percent int brightness; // total power of the LED Panels (both colors) in percent
int temperatur; // muxed color temperature of the LED Panels, from coldest to warmest in Kelvin int temperatur; // muxed color temperature of the LED Panels, from coldest to warmest in Kelvin
@ -17,10 +27,16 @@ private:
int power_warm; // power of the warm LEDs of Panels in percent int power_warm; // power of the warm LEDs of Panels in percent
int power_combined; //combined power of both LEDs in percent int power_combined; //combined power of both LEDs in percent
int resistance_cold; // Resistance of the DigiPot on Driver-Board
int resistance_warm; // Resistance of the DigiPot on Driver-Board
int fullCommonColor; // color mix with both LED´s at same brightess int fullCommonColor; // color mix with both LED´s at same brightess
bool adaptive_brightness; // true indecates adaptive brightness is enabled bool adaptive_brightness; // true indecates adaptive brightness is enabled
struct range cold_resistance_range;
struct range warm_resistance_range;
public: public:
LightMux(); LightMux();
@ -48,11 +64,15 @@ public:
int getPowerCombined(); int getPowerCombined();
int getResistanceCold();
int getResistanceWarm();
void toogleAdaptiveBrightness(); void toogleAdaptiveBrightness();
private: private:
void mux_linear(); // brightness will vary by different color temperature struct powermix mux_linear(); // brightness will vary by different color temperature
void mux_adaptiv(); // same brightness by different color temperature struct powermix mux_adaptiv(); // same brightness by different color temperature
double map(double value, double fromLow, double fromHigh, double toLow, double toHigh); // remaps the value
}; };
#endif // LIGHTMUX_H #endif // LIGHTMUX_H

View File

@ -38,6 +38,8 @@ void MainWindow::updateUI()
setLablePowerCold(lmux->getPowerCold()); setLablePowerCold(lmux->getPowerCold());
setLablePowerWarm(lmux->getPowerWarm()); setLablePowerWarm(lmux->getPowerWarm());
setLablePowerCombined(lmux->getPowerCombined()); setLablePowerCombined(lmux->getPowerCombined());
setLableResistanceCold(lmux->getResistanceCold());
setLableResistanceWarm(lmux->getResistanceWarm());
} }
@ -56,6 +58,14 @@ void MainWindow::setLablePowerCombined(int val)
ui->labelPowerCombined->setText("Combined Power: " + QString::number(val) + "%"); ui->labelPowerCombined->setText("Combined Power: " + QString::number(val) + "%");
} }
void MainWindow::setLableResistanceCold(int val){
ui->labelResistanceCold->setText("Resistance Cold: " + QString::number(val) + "Ω");
}
void MainWindow::setLableResistanceWarm(int val){
ui->labelResistanceWarm->setText("Resistance Warm: " + QString::number(val) + "Ω");
}
void MainWindow::on_BtnIncreaseBrightness_clicked() void MainWindow::on_BtnIncreaseBrightness_clicked()
{ {
lmux->incBrightness(); lmux->incBrightness();

View File

@ -19,6 +19,8 @@ public:
void setLablePowerCold(int val); void setLablePowerCold(int val);
void setLablePowerWarm(int val); void setLablePowerWarm(int val);
void setLablePowerCombined(int val); void setLablePowerCombined(int val);
void setLableResistanceCold(int val);
void setLableResistanceWarm(int val);
private slots: private slots:
void on_BtnIncreaseBrightness_clicked(); void on_BtnIncreaseBrightness_clicked();

View File

@ -298,6 +298,32 @@
<string>adaptive brightness</string> <string>adaptive brightness</string>
</property> </property>
</widget> </widget>
<widget class="QLabel" name="labelResistanceCold">
<property name="geometry">
<rect>
<x>220</x>
<y>240</y>
<width>161</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Resistance Cold:</string>
</property>
</widget>
<widget class="QLabel" name="labelResistanceWarm">
<property name="geometry">
<rect>
<x>220</x>
<y>270</y>
<width>161</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Resistance Warm:</string>
</property>
</widget>
</widget> </widget>
</widget> </widget>
<layoutdefault spacing="6" margin="11"/> <layoutdefault spacing="6" margin="11"/>