Arduino:if-compare参数

时间:2014-01-14 07:57:56

标签: c++ c embedded arduino

我正在尝试启动并运行一个小型BMP085气压计项目。我希望能够在不同的操作模式(MODE_PRESSURE和MODE_ALT)之间切换。我将MODE_PRESSUREMODE_ALT定义为const int

const int MODE_PRESSURE = 1;  // display pressure and temp
const int MODE_ALT      = 2;  // display altitude relative to sea level
int mode;                     // stores the current mode

void setup {
    mode = MODE_PRESSURE;
}

void loop {

    // Read mode button and set mode accordingly
    int buttonPressed = readButtons();

    switch(buttonPressed) {
    case BTN_MODE:
        if(mode == MODE_PRESSURE) { mode = MODE_ALT; }
        if(mode == MODE_ALT) { mode = MODE_PRESSURE; }
        Serial.println(mode); // <<-- always prints 1 ?!
        break;
    }
}

按下模式按钮时,我想切换当前模式。但我坚持if(mode == MODE_PRESSURE)。这句话莫名其妙地从未评估为真......?

我的C不是很流利,有什么我想念的吗?我可以不比较const intint变量吗?

P.S。:我还尝试了#define用于MODE_PRESSURE和MODE_ALT,以及const byte,但似乎没有任何效果。

5 个答案:

答案 0 :(得分:4)

按如下方式添加else

    if(mode == MODE_PRESSURE)  
       mode = MODE_ALT; 
    else if(mode == MODE_ALT) # although not need but keep if here also
       mode = MODE_PRESSURE; 

也可以使用嵌套开关:

switch(mode){
     case MODE_PRESSURE: mode = MODE_ALT; 
             break; 

     case MODE_ALT: mode = MODE_PRESSURE; 
             break;
}

答案 1 :(得分:4)

您每次都要将模式重置为压力。将您的if语句更改为

if (mode == MODE_PRESSURE)
    mode = MODE_ALT;
else
    mode = MODE_PRESSURE:

或者,如果你想要一个衬垫

mode = mode == MODE_PRESSURE ? MODE_ALT: MODE_PRESSURE;

mode = MODE_PRESSURE + MODE_ALT - mode;

答案 2 :(得分:1)

原因是当模式等于PRESSURE时,您将模式分配给ALT。但是你没有使用任何break语句,所以它会在第二个if条件下再次将模式设置为PRESSURE。

以下是代码的示例解决方案:

#include <stdio.h>

const int BTN_MODE = 0;
const int MODE_PRESSURE = 1;    // display pressure and temp
const int MODE_ALT = 2; // display altitude relative to sea level
int mode;   // stores the current mode

void setup()
{
    mode = MODE_PRESSURE;
}

void loop()
{

    // Read mode button and set mode accordingly
    // int buttonPressed = readButtons();
    int buttonPressed = BTN_MODE;

    switch (buttonPressed)
    {
        case 0:
            if (mode == MODE_PRESSURE)
            {
                mode = MODE_ALT;
                break;
            }
            if (mode == MODE_ALT)
            {
                mode = MODE_PRESSURE;
                break;
            }
            //Serial.println(mode); // <<-- always prints 1 ?!
            break;
    }
    printf(" The mode value is : %d\n", mode);
}

void main()
{
    setup();
    loop();
}

答案 3 :(得分:0)

您的第一个ifmodeMODE_ALT。这将迫使第二if始终为true

else添加到第二个测试:

else if(mode == MODE_ALT) ...

答案 4 :(得分:0)

你错过了两个ifs之间的“else”。尝试将你的代码踩在头脑中你会看到如果第一个if是真的,第二个也是真的,并设置MODE_PRESSURE。