求问此条件判断哪里出错了

2017-05-17 18:32:24 +08:00
 Explorare
#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 的不亮。是我哪里写错了么?

907 次点击
所在节点    问与答
2 条回复
zjqzxc
2017-05-17 18:49:13 +08:00
目测是 int 的锅,全换成 float (或者 double )试试

当色温为 128 的时候,3500K LED 亮,但 6500K 的不亮,
chn_B_PWM = (255 - color_tmp) * 2 / 255 * ilm;
( 255-128 )*2=254
254/255 = 0
所以。。。
Explorare
2017-05-17 19:05:28 +08:00
@zjqzxc 原来是这里错了,多谢指点,论文写的头发都要掉光了,事实证明写论文有害健康。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/362020

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX