Fixed PWM calculation for Lumini p30 LED reef lamp.
This commit is contained in:
parent
0188bb763f
commit
9e998f9c92
1 changed files with 27 additions and 9 deletions
|
@ -36,11 +36,10 @@ IPAddress dns ( 192, 168, 0, 1);
|
||||||
#define SCENE_NIGHTLY 2
|
#define SCENE_NIGHTLY 2
|
||||||
|
|
||||||
// 10 bit PWM
|
// 10 bit PWM
|
||||||
#define PWM_OFF 0 // 0V
|
#define PWM_OFF 0 // 0V
|
||||||
#define PWM_MIN 640 // 15V - minimum light amount (~1%)
|
#define PWM_MIN 640 // 15V - minimum light amount (~1%)
|
||||||
#define PWM_MAX 1023 // 24V - maximum light amount (100%)
|
#define PWM_MAX 1023 // 24V - maximum light amount (100%)
|
||||||
#define PWM_INC 4 // 24V-15V = 9V range; 9V ≙ 1024/640 = 383 counts; 383/100% = 3,83 counts (1%) / % => round up 4 counts / % (~1%)
|
#define BRI_TO_PWM_FACTOR 4 // 24V-15V = 9V range; 9V ≙ 1024-640 = 383 counts; 383/100% = 3,83 counts (1%) / % => round up 4 counts / % (~1%)
|
||||||
#define BRI_TO_PWM_FACTOR 4 // 0-255 uint8_t brightness data x4 is 0 to 1024
|
|
||||||
|
|
||||||
//********************************//
|
//********************************//
|
||||||
|
|
||||||
|
@ -104,15 +103,17 @@ void lightEngine()
|
||||||
{
|
{
|
||||||
in_transition = true;
|
in_transition = true;
|
||||||
current_bri[i] += step_level[i];
|
current_bri[i] += step_level[i];
|
||||||
if ((step_level[i] > 0.0 && current_bri[i] > bri[i]) || (step_level[i] < 0.0 && current_bri[i] < bri[i]))
|
if ((step_level[i] > 0.0 && current_bri[i] > bri[i]) ||
|
||||||
|
(step_level[i] < 0.0 && current_bri[i] < bri[i]))
|
||||||
{
|
{
|
||||||
current_bri[i] = bri[i];
|
current_bri[i] = bri[i];
|
||||||
}
|
}
|
||||||
analogWrite(pins[i], (int)(current_bri[i] * 4)); // TODO warum * 4?
|
|
||||||
|
analogWrite(pins[i], calcPWM(current_bri[i]));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
if (current_bri[i] != 0 )
|
if (current_bri[i] != 0)
|
||||||
{
|
{
|
||||||
in_transition = true;
|
in_transition = true;
|
||||||
current_bri[i] -= step_level[i];
|
current_bri[i] -= step_level[i];
|
||||||
|
@ -120,7 +121,8 @@ void lightEngine()
|
||||||
{
|
{
|
||||||
current_bri[i] = 0;
|
current_bri[i] = 0;
|
||||||
}
|
}
|
||||||
analogWrite(pins[i], (int)(current_bri[i] * 4)); // TODO warum * 4?
|
|
||||||
|
analogWrite(pins[i], calcPWM(current_bri[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -134,6 +136,22 @@ void lightEngine()
|
||||||
|
|
||||||
//********************************//
|
//********************************//
|
||||||
|
|
||||||
|
uint16_t calcPWM(float tbri)
|
||||||
|
{
|
||||||
|
uint16_t tmp_pwm = PWM_OFF;
|
||||||
|
if (tbri > 0.0)
|
||||||
|
{
|
||||||
|
tmp_pwm = PWM_MIN + (int)(tbri * BRI_TO_PWM_FACTOR);
|
||||||
|
}
|
||||||
|
if (tmp_pwm > PWM_MAX)
|
||||||
|
{
|
||||||
|
tmp_pwm = PWM_MAX;
|
||||||
|
}
|
||||||
|
return tmp_pwm;
|
||||||
|
}
|
||||||
|
|
||||||
|
//********************************//
|
||||||
|
|
||||||
void read_eeprom_config()
|
void read_eeprom_config()
|
||||||
{
|
{
|
||||||
for (uint8_t light = 0; light < LIGHTS_COUNT; light++)
|
for (uint8_t light = 0; light < LIGHTS_COUNT; light++)
|
||||||
|
|
Loading…
Reference in a new issue