#define LED_3500K_PWM 5
#define LED_6500K_PWM 6
int light_ilm = 128; //Range from 0 to 255.
int light_color_tmp = 127; //Range from 0 to 255.
void LightOn(int ilm, int color_tmp);
void setup() {
Serial.begin(38400);
Serial.println("System online");
}
void loop() {
LightOn(light_ilm, light_color_tmp);
}
void LightOn(int ilm, int color_tmp) {
byte chn_A_pin = LED_6500K_PWM;
byte chn_B_pin = LED_3500K_PWM;
int chn_A_PWM;
int chn_B_PWM;
if (color_tmp >= 128) {
chn_A_PWM = ilm;
chn_B_PWM = (255 - color_tmp) * 2 / 255 * ilm;
}
else {
chn_A_PWM = color_tmp * 2 / 255 * ilm;
chn_B_PWM = ilm;
}
analogWrite(chn_A_pin, chn_A_PWM);
analogWrite(chn_B_pin, chn_B_PWM);
}
这是一个 PWM 方式点亮双色温 LED 的 function,预期结果是,当色温高于处于 128~255 之间时,6500K 的 LED 亮度最高亮度(等于 light_ilm),3500K LED 的亮度则与之成反比,当色温为 255 时 3500K LED 为 0.
然而经过测试后发现,当色温为 128 的时候,3500K LED 亮,但 6500K 的不亮,色温为 127 时 6500K 的 LED 亮,3500K 的不亮。是我哪里写错了么?
1
zjqzxc 2017-05-17 18:49:13 +08:00 1
目测是 int 的锅,全换成 float (或者 double )试试
当色温为 128 的时候,3500K LED 亮,但 6500K 的不亮, chn_B_PWM = (255 - color_tmp) * 2 / 255 * ilm; ( 255-128 )*2=254 254/255 = 0 所以。。。 |