- if (adcval < 1) {
- adcval = 1;
- } else if (adcval > adc_exp) {
- new_pwm = old_pwm*adc_exp/adcval;
- } else if (adcval < adc_exp && 2 * adcval > adc_exp) {
- new_pwm = old_pwm*adc_exp/adcval;
- } else if (adcval < adc_exp) {
- new_pwm = 2 * old_pwm;
+ if (led_mode_changed) {
+ led_mode_changed = 0;
+ goto set_pwm;
+ }
+
+ log_word(((adcval & 0xFF) << 8) | old_pwm);
+
+ if (2*adcval > 5*adc_exp) { // >2.5x expected, lower significantly
+ new_pwm = 2*old_pwm/3;
+ } else if (3*adcval > 4*adc_exp) { // >1.33x expected, lower a bit
+ new_pwm = old_pwm - 1;
+ } else if (4*adcval < 3*adc_exp) { // 0.75x expected, raise a bit
+ new_pwm = old_pwm + 1;