用LPC1768控制LED

时间:2019-09-11 04:24:22

标签: c++ mbed

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

当我仅包含一段代码时,例如红色的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的接线正确,因为我做了一些简单的测试以确保每个开关和指示灯都在工作。感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我发现您的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; 
}