diff --git a/firmware/firmware.ino b/firmware/firmware.ino index db47f65..2d8c58b 100644 --- a/firmware/firmware.ino +++ b/firmware/firmware.ino @@ -36,11 +36,10 @@ IPAddress dns ( 192, 168, 0, 1); #define SCENE_NIGHTLY 2 // 10 bit PWM -#define PWM_OFF 0 // 0V -#define PWM_MIN 640 // 15V - minimum light amount (~1%) -#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 // 0-255 uint8_t brightness data x4 is 0 to 1024 +#define PWM_OFF 0 // 0V +#define PWM_MIN 640 // 15V - minimum light amount (~1%) +#define PWM_MAX 1023 // 24V - maximum light amount (100%) +#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%) //********************************// @@ -104,15 +103,17 @@ void lightEngine() { in_transition = true; 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]; } - analogWrite(pins[i], (int)(current_bri[i] * 4)); // TODO warum * 4? + + analogWrite(pins[i], calcPWM(current_bri[i])); } } else { - if (current_bri[i] != 0 ) + if (current_bri[i] != 0) { in_transition = true; current_bri[i] -= step_level[i]; @@ -120,7 +121,8 @@ void lightEngine() { 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() { for (uint8_t light = 0; light < LIGHTS_COUNT; light++)