V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Explorare
V2EX  ›  问与答

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

  •  
  •   Explorare · 2017-05-17 18:32:24 +08:00 · 964 次点击
    这是一个创建于 2752 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #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 的不亮。是我哪里写错了么?

    2 条回复    2017-05-17 19:05:28 +08:00
    zjqzxc
        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
    所以。。。
    Explorare
        2
    Explorare  
    OP
       2017-05-17 19:05:28 +08:00
    @zjqzxc 原来是这里错了,多谢指点,论文写的头发都要掉光了,事实证明写论文有害健康。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3104 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 13:51 · PVG 21:51 · LAX 05:51 · JFK 08:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.