【问题标题】:Controlling LED's with LPC1768用 LPC1768 控制 LED
【发布时间】:2019-09-11 04:24:22
【问题描述】:

我正在尝试编写一个程序,该程序根据按下的不同开关控制一组 LED。按下开关一时,红色 LED 应亮起。当开关两个被按下时,绿色 LED 应该打开。当按下开关 3 时,红色和绿色 LED 熄灭。

当我只包含一段代码时,比如红色 LED 部分,它可以正常工作。但是当我为开关 2 或 3 添加代码时,没有任何效果。

int main() {
red1 = 0;
red2 = 0;
red3 = 0;

green1 = 1;
green2 = 1;
green3 = 1;

while(true) {

    //controls for switch 1
    if (switch1 == true)
    {    
        red1 = 1; 
        wait_ms(10); 
        wait(0.4);  
        while (switch1 == 1) {};
        wait_ms(10); 
    }
    else if (switch1 == true && red1 == 1)
    {
        red2 = 1;
        wait_ms(10); 
        wait(0.4);  
        while (switch1 == 1) {};
        wait_ms(10); 
    }
    else if (switch1 == true && red1 == 1 && red2 == 1)
    {
        red3 = 1;
        wait_ms(10); 
        wait(0.4);  
        while (switch1 == 1) {};
        wait_ms(10); 
    }

    //controls for switch 2
    if (switch2 == true)
    {    
        green1 = 0; 
        wait_ms(10); 
        wait(0.4);  
        while (switch2 == 1) {};
        wait_ms(10); 
    }
    else if (switch2 == true && green1 == 0)
    {
        green1 = 0;
        wait_ms(10); 
        wait(0.4);  
        while (switch2 == 1) {};
        wait_ms(10); 
    }
    else if (switch2 == true && green1 == 0 && green2 == 0)
    {
        green3 = 0;
        wait_ms(10); 
        wait(0.4);  
        while (switch2 == 1) {};
        wait_ms(10); 
    }

    //controls for switch 3
    if (switch3 == true && red3 == 1 && green3 == 0)
    {
        red3 = 0;
        green3 = 1;
        wait_ms(10); 
        wait(0.4);  
        while (switch3 == 1) {};
        wait_ms(10);
    }
    else if(switch3 == true && red2 == 1 && green2 == 0)
    {
        red2 = 0;
        green2 = 1;
        wait_ms(10); 
        wait(0.4);  
        while (switch3 == 1) {};
        wait_ms(10);
    }
    else if (switch3 == true && red1 == 1 && green1 == 0)
    {
        red1 = 0;
        green1 = 1;
        wait_ms(10); 
        wait(0.4);  
        while (switch3 == 1) {};
        wait_ms(10);
    }
}

我没有错误消息,并且我知道我的 mbed 接线正确,因为我做了一些简单的测试以确保每个开关和灯都正常工作。感谢您的帮助

【问题讨论】:

    标签: c++ mbed


    【解决方案1】:

    我发现你的 if 语句有问题。

    在下面的简化代码中,(2) 和 (3) 永远不会被调用。即使在 switch1 == truered1 == 1 时,if 语句也会先计算 (1) 而不会计算 (2)。

    if (switch1 == true) // (1)
    {    
        red1 = 1; 
    }
    else if (switch1 == true && red1 == 1) // (2)
    {
        red2 = 1; 
    }
    else if (switch1 == true && red1 == 1 && red2 == 1) //(3)
    {
        red3 = 1; 
    }
    

    我认为下面是你想要的。

    if (switch1 == true && red1 == 1 && red2 == 1)
    {   
        red3 = 1; 
    }
    else if (switch1 == true && red1 == 1)
    {
        red2 = 1; 
    }
    else if (switch1 == true)
    {
        red1 = 1; 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 2019-11-16
      相关资源
      最近更新 更多