我正在尝试启动并运行一个小型BMP085气压计项目。我希望能够在不同的操作模式(MODE_PRESSURE和MODE_ALT)之间切换。我将MODE_PRESSURE
和MODE_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 int
和int
变量吗?
P.S。:我还尝试了#define
用于MODE_PRESSURE和MODE_ALT,以及const byte
,但似乎没有任何效果。
答案 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)
您的第一个if
集mode
到MODE_ALT
。这将迫使第二if
始终为true
。
将else
添加到第二个测试:
else if(mode == MODE_ALT) ...
答案 4 :(得分:0)
你错过了两个ifs之间的“else”。尝试将你的代码踩在头脑中你会看到如果第一个if是真的,第二个也是真的,并设置MODE_PRESSURE。